这一篇主要实现用户注册和登录
编写接口并设置URL
根目录添加api文件夹,添加auth.py注册auth蓝图为根路径
from flask import Blueprint, jsonify authbp = Blueprint('auth',__name__,url_prefix="") @authbp.route("/register",methods=['POST']) def register(): return jsonify({ "code": 0, "msg": "注册成功" })
在app.py加入auth蓝图
......
app.register_blueprint(authbp)
新建testapi.py测试接口,也可以使用api工具进行测试
from app import app client = app.test_client() with app.app_context(): r = client.post("/register") print(r.json)
然后编写注册逻辑,需要数据库添加对象,父类InfoCrud可以加入一些通用方法。
......
@classmethod def getall(cls, **kwargs): return cls.query.filter_by(**kwargs).all() @classmethod def getone(cls, id): return cls.query.get(id) @classmethod def add(cls, data): obj = cls(**data) db.session.add(obj) db.session.commit() return obj @classmethod def edit(cls, data): sql = update(cls).values(**data).where(cls.id == data['id']) db.session.execute(sql) db.session.commit() @classmethod def remove(cls, id): db.session.delete(cls.query.get(id)) db.session.commit()
api/auth.py编写注册代码,这里使用flask_restful校验请求字段,密码用generate_password_hash进行加密
from flask import Blueprint, jsonify from flask_restful import reqparse, abort from werkzeug.security import generate_password_hash from api import succees_response, error_response from models.user import User authbp = Blueprint('auth',__name__,url_prefix="") @authbp.route("/register",methods=['POST']) def register(): parser = reqparse.RequestParser() parser.add_argument("username", type=str, required=True, help="username is required") parser.add_argument('password', required=True, type=str, help='password is required') parser.add_argument("nickname", type=str, required=True, help="username is required") parser.add_argument('email', required=False, type=str) parser.add_argument('group_id', required=False, type=int) args = parser.parse_args() if User.exist(username=args['username']): return jsonify(code=400,msg="用户已存在") args.update({'password': generate_password_hash(args['password'], salt_length=8)}) User.add(args) return jsonify(succees_response)
group.py编写添加分组接口
from flask import Blueprint, jsonify from flask_restful import reqparse from api import error_response, succees_response from models.group import Group groupbp = Blueprint('group',__name__,url_prefix="/group") @groupbp.route("/add",methods=['POST']) def add(): parser = reqparse.RequestParser() parser.add_argument("name",required=True,type=str,help="name is required") parser.add_argument("info", required=False, type=str) args = parser.parse_args() if Group.exist(name=args['name']): return jsonify(code=400,msg="用户已存在") Group.add(args) return jsonify(succees_response)
app.py
......
app.register_blueprint(groupbp)
这样就可以通过接口注册用户了
编写登录接口,使用flask_jwt_extended.create_access_token创建access_token
from flask_jwt_extended import create_access_token from werkzeug.security import generate_password_hash, check_password_hash @authbp.route("/login",methods=['POST']) def login(): parser = reqparse.RequestParser() parser.add_argument("username", type=str, required=True, help="username is required") parser.add_argument('password', required=True, type=str, help='password is required') args = parser.parse_args() user = User.query.filter_by(username=args['username']).first() if user is None or user.delete_time is not None: return jsonify(code=400,msg="用户不存在") ispass = check_password_hash(user.password, args['password']) if not ispass: return jsonify(code=400,msg="密码错误") access_token = create_access_token(identity=user.id) return jsonify(code=0,msg="登录成功",data={ 'userid': user.id, 'access_token': access_token, 'nickname': user.nickname, 'username': user.username })
根目录添加auth.py,编写初始化JWTManager,以及校验用户是否登录的装饰器给后续接口做权限验证
from functools import wraps from flask import jsonify from flask_jwt_extended import verify_jwt_in_request, JWTManager jwt = JWTManager() def login_required(fn): @wraps(fn) def wrapper(*args,**kwargs): verify_jwt_in_request() return fn(*args,**kwargs) return wrapper @jwt.unauthorized_loader def unauthorized_loader_callback(e): return jsonify(code=10000,msg="认证失败,请检查请求头或者重新登陆")
jwt初始化app
app = Flask(__name__)
...
from auth import jwt
jwt.init_app(app)
接口登录成功
这样用户的注册和登录基本实现,下一步编写登录后其它数据的增删改查,并实现登录权限校验以及为用户指定权限。
标签:required,return,args,用户注册,flask,入门教程,parser,add,import From: https://www.cnblogs.com/zerotest/p/16796797.html