Files
effekt-interface/app/api/controller/baseCrudController.py
2026-05-07 19:21:19 +08:00

58 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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]