一、封装Response
from flask import jsonify
from datetime import timedelta
class Response:
def __init__(self, code, msg, data=None):
self.code = code
self.msg = msg
self.data = data # 添加data属性
def __str__(self):
# 修改__str__方法来包含data(如果存在)
return f"{self.__class__.__name__}({self.code}, \"{self.msg}\", data={self.data})"
@staticmethod
def SUCCESS(data=None):
"""返回一个成功的响应实例,可以包含额外的数据"""
return Response(0, "成功", data=data)
@staticmethod
def FAIL(msg="失败"):
"""返回一个失败的响应实例,允许自定义失败消息和包含额外的数据"""
return Response(401, msg, data="")
@staticmethod
def LOGIN_OUT(data=None):
"""返回一个失败的响应实例,允许自定义失败消息和包含额外的数据"""
return Response(-1, "登录状态已失效", data=data)
def to_dict(response):
return {"code": response.code, "msg": response.msg, "data": response.data}
二、返回体的使用
@admin_blueprint.route("/login", methods=['POST'])
def login():
data = request.get_json()
account = data.get('account')
password = data.get('password')
print(account)
print(password)
if account is None or password is None:
return Response.FAIL("账号或密码不能为空").to_dict()
input_string = f"{account}{password}{SECRET}"
print(input_string)
password = md5_util.md5_hex(input_string)
print(password)
mysqlAdminDO = session.query(adminDO).filter_by(admin_account=account).first()
print(mysqlAdminDO)
if mysqlAdminDO is None:
return Response.FAIL("用户不存在").to_dict()
mysql_password = mysqlAdminDO.admin_password
print(mysql_password)
if password != mysql_password:
return Response.FAIL("密码错误").to_dict()
if mysqlAdminDO.admin_status == 0:
return Response.FAIL("用户已被禁用").to_dict()
access_token = create_access_token(
identity=mysqlAdminDO.admin_phone,
expires_delta=timedelta(hours=168),
additional_claims={'adminid': mysqlAdminDO.admin_id}
)
access_token = f"Bearer {access_token}"
res_list = {"token":access_token}
return Response.SUCCESS(res_list).to_dict()