增加项目的各个功能

This commit is contained in:
qiaoxinjiu
2026-05-07 19:21:19 +08:00
parent aba1618f89
commit ee6cd4ae66
121 changed files with 9346 additions and 43 deletions

View File

@@ -0,0 +1,57 @@
# encoding: UTF-8
from datetime import date, datetime
from decimal import Decimal
from common.sqlSession import SqlSession
class BaseCrudController(object):
"""通用 Controller 基类,封装公共的请求取值与序列化逻辑。"""
def __init__(self, req_data):
# 每个 controller 持有一个独立 session沿用当前项目的使用方式。
self.session = SqlSession()
# req_data 兼容 request.args 和 request.get_json() 两种来源。
self.req_data = req_data
def close_session(self):
if self.session:
self.session.close()
@staticmethod
def _get(req_data, *keys, default=None):
"""按顺序读取多个候选参数名,兼容前后端字段别名。"""
for key in keys:
value = req_data.get(key)
if value not in (None, ''):
return value
return default
@staticmethod
def _format_value(value):
"""将数据库对象中的特殊类型转成可直接返回给前端的值。"""
if isinstance(value, datetime):
return value.strftime('%Y-%m-%d %H:%M:%S')
if isinstance(value, date):
return value.strftime('%Y-%m-%d')
if isinstance(value, Decimal):
return float(value)
return value
@classmethod
def serialize(cls, item, exclude=None):
"""单对象序列化,可按需排除不希望暴露给前端的字段。"""
if not item:
return {}
exclude = exclude or []
item_dict = item.to_dict()
for key in exclude:
item_dict.pop(key, None)
for key, value in item_dict.items():
item_dict[key] = cls._format_value(value)
return item_dict
@classmethod
def serialize_list(cls, items, exclude=None):
"""列表对象序列化。"""
return [cls.serialize(item, exclude) for item in items]