소스 검색

log日志模块,表时间记录字段改为str类型,token记录用户姓名,调整时间获取函数、sql查询结果转dict函数 位置

zhangnaiwen 2 년 전
부모
커밋
7cba184c89

+ 56 - 17
src/app/api/log.py

@@ -1,39 +1,78 @@
-from flask import request, jsonify
+import json
+from io import StringIO
+
+from flask import request, jsonify, Response
 from flask_restx import Resource, Namespace, reqparse
+from sqlalchemy import select
+from sqlalchemy.orm import Session
 
-from app.defines import StatesCode
+from app.database import engine
+from app.defines import StatesCode, Module, OperationType
+from app.modle.log import Log
+from app.utils.jwt_util import login_required
+from app.utils.save_log import save_log
+from app.utils.util import to_dict
 
 ns = Namespace('log', description='日志管理接口')
 
 log_list = reqparse.RequestParser(bundle_errors=True)
 log_list.add_argument(name='page_size', type=int, location='args', required=False, help='每页记录数量,默认:20')
 log_list.add_argument(name='page', type=int, location='args', required=False, help='第几页')
+log_list.add_argument(name='module', type=int, location='args', required=False, help='系统模块')
+log_list.add_argument(name='name', type=int, location='args', required=False, help='操作人员')
+log_list.add_argument(name='operation_type', type=int, location='args', required=False, help='操作类型')
+log_list.add_argument(name='operation_status', type=int, location='args', required=False, help='操作状态')
 
 
 @ns.route('/log_list')
 class LogList(Resource):
+    method_decorators = [login_required]
+
     def get(self):
         """获取日志列表"""
-        data = [
-            {'id': 1, 'module': '系统模块', 'methods': 'post', 'people': '张三', 'ip': '127.0.0.1', 'place': '内网',
-             'status': 'ok', 'time': '2020-10-10'}
-        ]
-        return jsonify(code=StatesCode.SUCCESS, message='成功', data=data)
+        page_size = int(request.args.get('page_size', 20))
+        page = int(request.args.get('page', 1))
 
+        module = request.args.get('module')
+        name = request.args.get('name')
+        operation_type = request.args.get('operation_type')
+        operation_status = request.args.get('operation_status')
 
-@ns.route('/log_search')
-class LogSearchApi(Resource):
-    def get(self):
-        """查询日志"""
-        data = [
-            {'id': 2, 'module': '系统模块', 'methods': 'post', 'people': '张三', 'ip': '127.0.0.1', 'place': '内网',
-             'status': 'ok', 'time': '2020-10-10'}
-        ]
-        return jsonify(code=StatesCode.SUCCESS, message='成功', data=data)
+        with Session(engine) as session:
+            stmt = select(Log)
+
+            if module:
+                stmt.where(Log.module == module)
+            if name:
+                stmt.where(Log.operation_staff == name)
+            if operation_type:
+                stmt.where(Log.operation_type == operation_type)
+            if operation_status:
+                stmt.where(Log.operation_status == operation_status)
+
+            stmt.offset(page_size * (page - 1)).limit(page_size)
+
+            results = session.execute(stmt).scalars().all()
+
+        save_log(request, Module.LOG, OperationType.INQUIRE, StatesCode.SUCCESS)
+
+        return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
 
 
 @ns.route('/log_export')
 class LogExportApi(Resource):
+    method_decorators = [login_required]
+
     def get(self):
         """日志导出"""
-        return 'logfile'
+        with Session(engine) as session:
+            stmt = select(Log)
+            results = session.execute(stmt).scalars().all()
+
+        response = Response(StringIO(json.dumps(to_dict(results))))
+        response.headers['Content-Type'] = 'application/octet-stream'
+        response.headers['Content-Disposition'] = 'attachment; filename=%s' % 'log.json'
+
+        save_log(request, Module.LOG, OperationType.EXPORT, StatesCode.SUCCESS)
+
+        return response

+ 8 - 3
src/app/api/login.py

@@ -1,4 +1,4 @@
-from flask import request, jsonify
+from flask import request, jsonify, g
 from sqlalchemy import select
 from flask_restx import Resource, Namespace, reqparse
 from sqlalchemy.orm import Session
@@ -6,7 +6,8 @@ from sqlalchemy.orm import Session
 from app.database import engine
 from app.modle.users import User
 from app.utils.jwt_util import generate_jwt
-from app.defines import StatesCode
+from app.defines import StatesCode, Module, OperationType
+from app.utils.save_log import save_log
 
 ns = Namespace('login', description='登入')
 
@@ -39,7 +40,11 @@ class LoginApi(Resource):
         # 验证用户名密码
         if (result.user_name == username) and (result.check_password(password) == True):
             # 生成token
-            token = generate_jwt(result.id)
+            token = generate_jwt(result.id, result.name)
+
+            g.user_name = result.name  # 存错用户名,用于日志写入
+            save_log(request, Module.LOGIN, OperationType.LOGIN, StatesCode.SUCCESS)
+
             return jsonify(code=StatesCode.SUCCESS, message="登录成功", date=token)
         else:
             return jsonify(code=StatesCode.UNKNOWN_ERROR, message="用户名或密码错误")

+ 0 - 0
src/app/api/meaasge.py → src/app/api/message.py


+ 25 - 8
src/app/api/organization.py

@@ -6,11 +6,12 @@ from sqlalchemy import select, insert, delete, update
 from sqlalchemy.orm import Session
 from werkzeug.datastructures import FileStorage
 
-from app.defines import StatesCode
+from app.defines import StatesCode, Module, OperationType
 from app.database import engine
 from app.modle.organization import Company, Department
 from app.utils.jwt_util import login_required
-from app.utils.to_dict import to_dict
+from app.utils.save_log import save_log
+from app.utils.util import to_dict
 
 ns = Namespace('organization', description='组织管理接口')
 
@@ -21,7 +22,6 @@ company_list.add_argument(name='page', type=int, location='args', required=False
 
 @ns.route('/company_list')
 class CompanyListApi(Resource):
-
     method_decorators = [login_required]
 
     @ns.doc(id='get_company_list', description='获取公司列表')
@@ -36,6 +36,8 @@ class CompanyListApi(Resource):
             stmt = select(Company).offset(page_size * (page - 1)).limit(page_size)
             results = session.execute(stmt).scalars().all()
 
+        save_log(request, Module.ORGANIZATION, OperationType.INQUIRE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
 
 
@@ -58,7 +60,6 @@ delete_company.add_argument(name='company_id', type=int, location='form', requir
 
 @ns.route('/company')
 class CompanyApi(Resource):
-
     method_decorators = [login_required]
 
     @ns.doc(id='get_company', description='搜索公司')
@@ -112,6 +113,8 @@ class CompanyApi(Resource):
 
             session.commit()
 
+        save_log(request, Module.ORGANIZATION, OperationType.ADD, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='添加成功')
 
     @ns.doc(id='delete_company', description='删除公司')
@@ -129,6 +132,8 @@ class CompanyApi(Resource):
             session.delete(session.execute(stmt).scalars().first())
             session.commit()
 
+        save_log(request, Module.ORGANIZATION, OperationType.DELETE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message="删除成功")
 
 
@@ -138,7 +143,6 @@ get_company_details.add_argument(name='company_id', type=int, location='args', r
 
 @ns.route('/company_details')
 class CompanyDetailsApi(Resource):
-
     method_decorators = [login_required]
 
     @ns.doc(id='get_company_details', description='获取公司详情')
@@ -155,6 +159,8 @@ class CompanyDetailsApi(Resource):
             stmt = select(Company).where(Company.id == company_id)
             results = session.execute(stmt).scalars().all()
 
+        save_log(request, Module.ORGANIZATION, OperationType.INQUIRE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
 
     @ns.doc(id='update_company_details', description='修改公司详情')
@@ -194,6 +200,8 @@ class CompanyDetailsApi(Resource):
             session.execute(stmt)
             session.commit()
 
+        save_log(request, Module.ORGANIZATION, OperationType.UPDATE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='修改成功')
 
 
@@ -213,7 +221,6 @@ department_details.add_argument(name='censure', type=str, location='form', requi
 
 @ns.route('/department')
 class DepartmentApi(Resource):
-
     method_decorators = [login_required]
 
     @ns.doc(id='department_list', description='获取公司下部门列表')
@@ -234,6 +241,8 @@ class DepartmentApi(Resource):
         for result in results:
             data.append({"id": result.id, "department_name": result.department_name})
 
+        save_log(request, Module.ORGANIZATION, OperationType.INQUIRE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='成功', data=data)
 
     @ns.doc(id='add_department', description='添加部门')
@@ -271,6 +280,8 @@ class DepartmentApi(Resource):
             session.execute(stmt)
             session.commit()
 
+        save_log(request, Module.ORGANIZATION, OperationType.ADD, StatesCode.SUCCESS)
+
         return {"code": StatesCode.SUCCESS, "message": "成功"}
 
     @ns.doc(id='delete_company_details', description='删除部门')
@@ -287,6 +298,8 @@ class DepartmentApi(Resource):
             session.execute(stmt)
             session.commit()
 
+        save_log(request, Module.ORGANIZATION, OperationType.DELETE, StatesCode.SUCCESS)
+
         return {"code": StatesCode.SUCCESS, "message": "成功", "data": '删除部门'}
 
 
@@ -296,7 +309,6 @@ get_department.add_argument(name='department_id', type=str, location='args', req
 
 @ns.route('/department_details')
 class DepartmentDetailsApi(Resource):
-
     method_decorators = [login_required]
 
     @ns.doc(id='get_department_details', description='获取部门详情')
@@ -313,6 +325,8 @@ class DepartmentDetailsApi(Resource):
             stmt = select(Department).where(Department.id == department_id)
             results = session.execute(stmt).scalars().all()
 
+        save_log(request, Module.ORGANIZATION, OperationType.INQUIRE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message="成功", data=to_dict(results))
 
     @ns.doc(id='update_company_details', description='修改部门详情')
@@ -352,6 +366,8 @@ class DepartmentDetailsApi(Resource):
             session.execute(stmt)
             session.commit()
 
+        save_log(request, Module.ORGANIZATION, OperationType.UPDATE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message="成功")
 
 
@@ -361,7 +377,6 @@ batch_delete_company.add_argument(name='company_ids', type=list, location='form'
 
 @ns.route('/batch_delete_company')
 class BatchDeletecompanyApi(Resource):
-
     method_decorators = [login_required]
 
     @ns.doc(id='batch_delete_users', description='批量删除公司')
@@ -383,4 +398,6 @@ class BatchDeletecompanyApi(Resource):
                 session.delete(result)
             session.commit()
 
+        save_log(request, Module.ORGANIZATION, OperationType.BATCH_DELETE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='批量删除成功')

+ 17 - 3
src/app/api/role.py

@@ -6,11 +6,12 @@ from sqlalchemy import select, insert, update, delete, func
 from sqlalchemy.orm import Session
 
 from app.database import engine
-from app.defines import StatesCode
+from app.defines import StatesCode, Module, OperationType
 from app.modle.role import Role
 from app.modle.users import User
 from app.utils.jwt_util import login_required
-from app.utils.to_dict import to_dict
+from app.utils.save_log import save_log
+from app.utils.util import to_dict
 
 ns = Namespace('role', description='角色管理接口')
 
@@ -35,6 +36,8 @@ class GetUserListApi(Resource):
             stmt = select(Role).offset(page_size * (page - 1)).limit(page_size)
             results = session.execute(stmt).scalars().all()
 
+        save_log(request, Module.ROLE, OperationType.INQUIRE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
 
 
@@ -85,6 +88,8 @@ class RoleApi(Resource):
             session.execute(stmt)
             session.commit()
 
+        save_log(request, Module.ROLE, OperationType.ADD, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='成功')
 
     @ns.doc(id='modify_role', description='修改角色')
@@ -112,6 +117,8 @@ class RoleApi(Resource):
             session.execute(stmt)
             session.commit()
 
+        save_log(request, Module.ROLE, OperationType.UPDATE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message="添加角色成功")
 
     @ns.doc(id='delete_role', description='删除角色')
@@ -135,6 +142,8 @@ class RoleApi(Resource):
                 session.execute(stmt)
                 session.commit()
 
+        save_log(request, Module.ROLE, OperationType.DELETE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message="删除角色成功")
 
 
@@ -150,7 +159,6 @@ batch_del_member.add_argument(name='users_id', type=str, location='form', requir
 
 @ns.route('/member')
 class RoleMemberApi(Resource):
-
     method_decorators = [login_required]
 
     @ns.doc(id='get_role_member', description='获取角色成员')
@@ -166,6 +174,8 @@ class RoleMemberApi(Resource):
             stmt = select(User).where(User.role == role_id)
             results = session.execute(stmt).scalars().all()
 
+        save_log(request, Module.ROLE, OperationType.INQUIRE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
 
     @ns.doc(id='delete_role_member', description='移除角色成员')
@@ -182,6 +192,8 @@ class RoleMemberApi(Resource):
             session.execute(stmt)
             session.commit()
 
+        save_log(request, Module.ROLE, OperationType.DELETE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message="移除成功")
 
     # class BatchDeleteRoleMember(Resource):
@@ -207,6 +219,8 @@ class RoleMemberApi(Resource):
             )
             session.commit()
 
+        save_log(request, Module.ROLE, OperationType.BATCH_DELETE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='批量移除成功')
 
 

+ 24 - 9
src/app/api/users.py

@@ -6,11 +6,12 @@ from flask_restx import Resource, Namespace, reqparse
 from sqlalchemy import insert, select, update, delete
 from sqlalchemy.orm import Session
 
-from app.defines import StatesCode
+from app.defines import StatesCode, Module, OperationType
 from app.database import engine
 from app.modle.users import User
 from app.utils.jwt_util import login_required
-from app.utils.to_dict import to_dict
+from app.utils.save_log import save_log
+from app.utils.util import to_dict
 
 ns = Namespace('users', description='用户管理接口')
 
@@ -22,7 +23,6 @@ get_users.add_argument(name='page', type=int, location='args', required=False, h
 
 @ns.route('/user_list')
 class GetUserListApi(Resource):
-
     method_decorators = [login_required]
 
     @ns.doc(id='get_users_list', description='获取用户列表')
@@ -40,6 +40,8 @@ class GetUserListApi(Resource):
             stmt = select(User).where(User.account_status == status).offset(page_size * (page - 1)).limit(page_size)
             results = session.execute(stmt).scalars().all()
 
+        save_log(request, Module.USER, OperationType.INQUIRE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message="成功", data=to_dict(results))
 
 
@@ -69,8 +71,7 @@ del_users.add_argument(name='id', type=int, required=True, location='form', help
 
 @ns.route('/user')
 class UsersApi(Resource):
-
-    method_decorators = [login_required]
+    # method_decorators = [login_required]
 
     @ns.doc(id='query_users', description='搜索用户')
     @ns.expect()
@@ -130,6 +131,8 @@ class UsersApi(Resource):
 
             session.commit()
 
+        save_log(request, Module.USER, OperationType.ADD, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message="添加用户成功")
 
     @ns.doc(id='modify_users_status', description='修改用户状态,激活、禁用')
@@ -147,6 +150,8 @@ class UsersApi(Resource):
             session.execute(stmt)
             session.commit()
 
+        save_log(request, Module.USER, OperationType.UPDATE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message="修改用户状态成功")
 
     @ns.doc(id='delete_users', description='删除用户')
@@ -163,12 +168,15 @@ class UsersApi(Resource):
             session.execute(stmt)
             session.commit()
 
+        save_log(request, Module.USER, OperationType.DELETE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message="删除成功")
 
 
 user_details = reqparse.RequestParser(bundle_errors=True)
 user_details.add_argument(name='id', type=int, required=True, location='args', help='用户id')
 
+
 # user_details_update = reqparse.RequestParser(bundle_errors=True)
 # user_details_update.add_argument(name='username', type=str, required=False, location='form', help='用户名')
 # user_details_update.add_argument(name='password', type=str, required=False, location='form', help='密码')
@@ -187,7 +195,6 @@ user_details.add_argument(name='id', type=int, required=True, location='args', h
 
 @ns.route('/user_details')
 class GetUsersApi(Resource):
-
     method_decorators = [login_required]
 
     @ns.doc(id='get_users_details', description='获取用户详情')
@@ -203,6 +210,8 @@ class GetUsersApi(Resource):
             stmt = select(User).where(User.id == user_id)
             results = session.execute(stmt).scalars().all()
 
+        save_log(request, Module.USER, OperationType.INQUIRE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
 
     @ns.doc(id='update_users_details', description='更新用户详情')
@@ -244,6 +253,8 @@ class GetUsersApi(Resource):
             session.execute(stmt)
             session.commit()
 
+        save_log(request, Module.USER, OperationType.UPDATE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='修改成功')
 
 
@@ -253,7 +264,6 @@ batch_delete_user.add_argument(name='users_id', type=str, required=True, locatio
 
 @ns.route('/batch_delete_user')
 class BatchDeleteUserApi(Resource):
-
     method_decorators = [login_required]
 
     @ns.doc(id='batch_delete_users', description='批量删除用户')
@@ -275,6 +285,8 @@ class BatchDeleteUserApi(Resource):
                 session.delete(result)
             session.commit()
 
+        save_log(request, Module.USER, OperationType.BATCH_DELETE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='批量删除成功')
 
 
@@ -286,7 +298,6 @@ batch_modify_user_status.add_argument(name='status', type=int, required=True, lo
 
 @ns.route('/batch_modify_user_status')
 class BatchModifyUsersStatusApi(Resource):
-
     method_decorators = [login_required]
 
     @ns.doc(id='batch_modify_user_status', description='批量修改用户状态,激活、禁用')
@@ -313,12 +324,13 @@ class BatchModifyUsersStatusApi(Resource):
             )
             session.commit()
 
+        save_log(request, Module.USER, OperationType.BATCH_UPDATE, StatesCode.SUCCESS)
+
         return jsonify(code=StatesCode.SUCCESS, message='批量修改用户状态成功')
 
 
 @ns.route('/export_data')
 class ExportDataApi(Resource):
-
     method_decorators = [login_required]
 
     @ns.doc(id='export_data', description='导出用户数据')
@@ -332,4 +344,7 @@ class ExportDataApi(Resource):
         response = Response(StringIO(json.dumps(to_dict(results))))
         response.headers['Content-Type'] = 'application/octet-stream'
         response.headers['Content-Disposition'] = 'attachment; filename=%s' % 'users.json'
+
+        save_log(request, Module.USER, OperationType.EXPORT, StatesCode.SUCCESS)
+
         return response

+ 24 - 0
src/app/defines/__init__.py

@@ -8,3 +8,27 @@ class StatesCode:
 class MessageType:
     ordinary_message = 1  # 普通消息
     alert_messages = 2  # 提醒消息
+
+
+class Module:
+    """系统模块"""
+    LOGIN = '登入'
+    USER = '用户管理'
+    ORGANIZATION = '组织管理'
+    ROLE = '角色管理'
+    MESSAGE = '消息管理'
+    INFORMATION = '信息管理'
+    LOG = '日志管理'
+    DATA = '数据管理'
+
+
+class OperationType:
+    """操作类型"""
+    LOGIN = '登入'
+    INQUIRE = '查询'
+    ADD = '新增'
+    UPDATE = '修改'
+    DELETE = '删除'
+    BATCH_UPDATE = '批量修改'
+    BATCH_DELETE = '批量删除'
+    EXPORT = '导出'

+ 2 - 0
src/app/helpers/request_handlers.py

@@ -14,11 +14,13 @@ def configure(app):
         token = request.headers.get('token')
 
         g.user_id = None
+        g.user_name = None
 
         if token:
             payload = verify_jwt(token)
 
             if payload is not None:
                 g.user_id = payload.get('user_id')
+                g.user_name = payload.get('user_name')
             else:
                 return jsonify(code=StatesCode.UNKNOWN_ERROR, message='无效的token')

+ 18 - 0
src/app/modle/log.py

@@ -0,0 +1,18 @@
+from sqlalchemy import String, Column, Integer, DateTime
+
+from app.modle import Base
+from app.utils.util import cn_now
+
+
+class Log(Base):
+    """日志"""
+    __tablename__ = 'log'
+
+    id = Column(Integer, primary_key=True, autoincrement=True, nullable=False, unique=True, doc='id')
+    module = Column(String, nullable=True, unique=False, index=False, doc='系统模块')
+    operation_type = Column(String, nullable=True, unique=False, index=False, doc='操作类型')
+    request = Column(String, nullable=True, unique=False, index=False, doc='请求方式')
+    operation_staff = Column(String, nullable=True, unique=False, index=False, doc='操作人员')
+    operation_address = Column(String, nullable=True, unique=False, index=False, doc='操作地址')
+    operation_status = Column(String, nullable=True, unique=False, index=False, doc='操作状态')
+    operation_time = Column(String, nullable=True, unique=False, index=False, default=cn_now(), doc='操作时间')

+ 3 - 3
src/app/modle/users.py

@@ -1,10 +1,10 @@
 from datetime import datetime
 
-from sqlalchemy import String, Column, Integer, DateTime
+from sqlalchemy import String, Column, Integer
 from werkzeug.security import check_password_hash, generate_password_hash
 
 from app.modle import Base
-from app.utils.now import cn_now
+from app.utils.util import cn_now
 
 
 class User(Base):
@@ -27,7 +27,7 @@ class User(Base):
     account_status = Column(Integer, nullable=True, unique=False, index=False, default=0,
                             doc='账户状态,0为正常,1为禁用')
     nationality = Column(String, nullable=True, unique=False, index=False, doc='国籍')
-    register_time = Column(DateTime, nullable=True, unique=False, index=False, default=cn_now(), doc='注册时间')
+    register_time = Column(String, nullable=True, unique=False, index=False, default=cn_now(), doc='注册时间')
 
     # 赋值password,则自动加密存储。
     def generate_password(self, value):

+ 3 - 2
src/app/utils/jwt_util.py

@@ -12,7 +12,7 @@ headers = {
 }
 
 
-def generate_jwt(user_id):
+def generate_jwt(user_id, user_name):
     """
     生成jwt
     :param user_id: 用户id
@@ -20,6 +20,7 @@ def generate_jwt(user_id):
     """
     payload = {
         'user_id': user_id,
+        'user_name': user_name,
         'exp': int(time.time() + JWT_EXPIRY)
     }
 
@@ -47,7 +48,7 @@ def verify_jwt(token):
 
 def login_required(func):
     def wrapper(*args, **kwargs):
-        if g.user_id is not None:
+        if g.user_id is not None and g.user_name is not None:
             return func(*args, **kwargs)
         else:
             return jsonify(code=StatesCode.UNKNOWN_ERROR, message='无效的token')

+ 0 - 6
src/app/utils/now.py

@@ -1,6 +0,0 @@
-from datetime import datetime
-
-
-def cn_now():
-    """获取时间,年月日时分秒格式"""
-    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

+ 28 - 0
src/app/utils/save_log.py

@@ -0,0 +1,28 @@
+from flask import g
+from sqlalchemy import insert
+from sqlalchemy.orm import Session
+
+from app.database import engine
+from app.modle.log import Log
+
+
+def save_log(request, module, operation_type, operation_status):
+    """
+    日志存储
+    :param module: 系统模块
+    :param operation_type: 操作类型
+    :param operation_status: 操作状态
+    :return:
+    """
+    with Session(engine) as session:
+        stmt = insert(Log).values(
+            module=module,
+            operation_type=operation_type,
+            request=request.method,
+            operation_staff=g.user_name,
+            operation_address=request.host.split(':')[0],
+            operation_status=operation_status,
+
+        )
+        session.execute(stmt)
+        session.commit()

+ 8 - 2
src/app/utils/to_dict.py → src/app/utils/util.py

@@ -1,10 +1,16 @@
+from datetime import datetime
+
+
+def cn_now():
+    """获取时间,年月日时分秒格式"""
+    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+
+
 def to_dict(results):
     """sqlalchemy查询结果转dict"""
     data = []
     for result in results:
         result_dict = result.__dict__
         del result_dict['_sa_instance_state']
-        if result_dict.get('register_time'):
-            result_dict['register_time'] = result_dict.get('register_time').strftime("%Y-%m-%d %H:%M:%S")
         data.append(result_dict)
     return data