flask(6):简单的登录和注册功能实现 您所在的位置:网站首页 flask实现登录权限 flask(6):简单的登录和注册功能实现

flask(6):简单的登录和注册功能实现

2023-06-28 09:03| 来源: 网络整理| 查看: 265

注册功能

注册功能本质上是在数据库插入数据。所以只需要定义个接口,接口里面调用模型操作数据库插入数据,再此之前自己通过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 实验室设备网 版权所有