from dataclasses import asdict from framework.main_framework import Response, main_function from framework.requests_dataclass import SampleRequests from dataclasses import dataclass from flask import Blueprint from flask import request from framework.m_mysql_cli import MysqlCli from framework.response_code import RequestMethods @dataclass class OverrideRequestsPOST(SampleRequests): username: str password: str def __init__(self): super(OverrideRequestsPOST, self).__init__(json_data=request.get_data(), methods=RequestMethods.POST) self.username = self.json_data.get("username") self.password = self.json_data.get("password") if not self.username or not self.password: self.make_exception(self.response_code_enum.RESPONSE_PARAMS_IS_VALID) @dataclass class ResponseInterface: username: str user_token: str def convert_to_dict(self) -> dict: return asdict(self) class OverrideMysqlCli(MysqlCli): """ 创建Mysql操作类 """ def __init__(self): super(OverrideMysqlCli, self).__init__() self.table = "accounts_info" def handle_search_password(self, params: OverrideRequestsPOST) -> dict: sql: str = f"SELECT username, password FROM {self.table} WHERE username='{params.username}' AND 1=1" self.create_sql(sql) mysql_result: dict = self.fetchone(fetchall=True) self.check_mysql_exception(mysql_result=mysql_result) return mysql_result def handle_update_token(self, data: ResponseInterface) -> None: sql: str = f"UPDATE {self.table} SET token='{data.user_token}' WHERE username='{data.username}'" self.create_sql(sql) mysql_result = self.commit_all(please_commit=True) self.check_mysql_exception(mysql_result=mysql_result) class OverriderMainResponse(Response): def __init__(self, connect_mysql: bool = True): super(OverriderMainResponse, self).__init__() self.is_connect_mysql = connect_mysql # 是否连接数据库 if self.is_connect_mysql: self.mysql_cli: OverrideMysqlCli = OverrideMysqlCli() # 是否处理成功 self.handle_success: bool = False def core(self) -> None: params = OverrideRequestsPOST() mysql_result = self.mysql_cli.handle_search_password(params=params) if not self.mysql_cli.call_result(mysql_result): self.make_exception(self.response_code_enum.RESPONSE_401_Unauthorized) form_password = self.md5sum(params.password) mysql_password = self.mysql_cli.call_result(mysql_result)[0][1] if form_password != mysql_password: self.make_exception(self.response_code_enum.RESPONSE_401_Unauthorized) create_token: str = self.md5sum(f"{mysql_password}+{self.call_datetime(need_str=True)}") response_interface: ResponseInterface = ResponseInterface(username=params.username, user_token=create_token) self.mysql_cli.handle_update_token(data=response_interface) self.handle_success = True if self.handle_success: response_data: dict = response_interface.convert_to_dict() self.build_response_data(response_data) self.build_response_code(self.response_code_enum.RESPONSE_200_SUCCESS) def before_response(self) -> dict: if self.response == self.response_code_enum.RESPONSE_200_SUCCESS: pass if self.is_connect_mysql: self.mysql_cli.close_connect() return self.make_response() login_bp = Blueprint("login_bp", __name__) @login_bp.route("/login", methods=["POST"]) def main(): override_main_response = OverriderMainResponse() return main_function(override_main_response)