flask(6):简单的登录和注册功能实现 | 您所在的位置:网站首页 › flask实现登录权限 › flask(6):简单的登录和注册功能实现 |
注册功能
注册功能本质上是在数据库插入数据。所以只需要定义个接口,接口里面调用模型操作数据库插入数据,再此之前自己通过migrate创建数据库的表 模型 class EmployeeModel(BaseModel): __tablename__ = 'employee' # __bind_key__ = 'other' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(32), unique=False) pswd = db.Column(db.String(32), unique=False) is_delete = db.Column(db.Integer, unique=False) phone = db.Column(db.String(32), unique=False) 接口 @bp.route('/regist', methods=['POST']) def regist(): data = request.get_json() input_keys = [] for keys in request.get_json().keys(): input_keys.append(keys) if input_keys != ['name', 'password', 'phone']: return jsonify(JsonResponse.error(msg="请校验body体中的输入键")) employee = EmployeeModel.query.filter(EmployeeModel.name == data['name']).first() if employee is not None: return jsonify(JsonResponse.error(msg="用户名已存在")) phone = EmployeeModel.query.filter(EmployeeModel.phone == data['phone']).first() if phone is not None: return jsonify(JsonResponse.error(msg="号码已经使用")) else: emp = EmployeeModel(name=data['name'], pswd=data['password'], phone=data['phone']) db.session.add(emp) db.session.commit() employee = EmployeeModel.query.filter(EmployeeModel.name == data['name']).first() del (employee.__dict__)['_sa_instance_state'] return jsonify(JsonResponse.success(msg="注册成功", data=(employee.__dict__['create_time']))) 登录功能登录功能即查询数据库来做匹配。不存在返回用户不存在,如果存在校验密码是否正确,密码正确登录成功,并赋予session(session的作用为过滤器使用,过滤判断是否登录,不登录就其他接口被访问的时候的拒绝访问作用) 工厂函数添加配置 def create_app(test_config=None): # create and configure the app ## instance_relative_config设置为True则代表开启从文件加载配置,默认为False app = Flask(__name__, instance_relative_config=True) cx = app.app_context() cx.push() a = current_app app.secret_key = str(datetime.datetime.now()) #配置加密方式 接口 from flask import session @bp.route('/login', methods=['POST']) def login(): data = request.get_json() input_keys = [] for keys in request.get_json().keys(): input_keys.append(keys) if input_keys != ['name', 'password']: return jsonify(JsonResponse.error(msg="请校验body体中的输入键")) employee = EmployeeModel.query.filter(EmployeeModel.name == data['name']).first() # del (employee.__dict__)['_sa_instance_state'] # # print(type(employee.__dict__)) if employee is None: return jsonify(JsonResponse.error(msg="用户不存在")) elif data['password'] != EmployeeModel.query.filter(EmployeeModel.name.like(data['name'])).all()[0].pswd: return jsonify(JsonResponse.error(msg="密码错误")) else: # (employee.__dict__).pop('_sa_instance_state') # (employee.__dict__).pop('create_time') # (employee.__dict__).pop('update_time') # (employee.__dict__).pop('id') del (employee.__dict__)['_sa_instance_state'] del (employee.__dict__)['create_time'] del (employee.__dict__)['update_time'] # del (employee.__dict__)['pswd'] # print(employee.__dict__) session['emp_id']=(employee.__dict__)['id'] del (employee.__dict__)['id'] return jsonify(JsonResponse.success(msg="登录成功", data=(employee.__dict__))) 设置过滤器在app文件设置过滤器用@app.before_request,其作用为在每个请求前执行该方法 from RealProject import create_app from flask import session, g, jsonify, request from common.json_responsebody import JsonResponse from app.employee.models import EmployeeModel app = create_app() @app.before_request def bf_request(): emp_id = session.get('emp_id') if emp_id: emp = EmployeeModel.query.get(emp_id) # setattr(g, 'emp', emp) else: # setattr(g, 'emp', None) path_list = [ '/employee/login', '/employee/regist' ] #此列表告诉过滤器这两个接口不需要做过滤判断,直接可以放行处理 if request.path not in path_list: return jsonify(JsonResponse.error(msg='未登录')) if __name__ == '__main__': app.run(debug=True) postman查看效果 未登陆 |
CopyRight 2018-2019 实验室设备网 版权所有 |