- 新增图像生成接口,支持试用、积分和自定义API Key模式 - 实现生成图片结果异步上传至MinIO存储,带重试机制 - 优化积分预扣除和异常退还逻辑,保障用户积分准确 - 添加获取生成历史记录接口,支持时间范围和分页 - 提供本地字典配置接口,支持模型、比例、提示模板和尺寸 - 实现图片批量上传接口,支持S3兼容对象存储 feat(admin): 增加管理员角色管理与权限分配接口 - 实现角色列表查询、角色创建、更新及删除功能 - 增加权限列表查询接口 - 实现用户角色分配接口,便于统一管理用户权限 - 增加系统字典增删查改接口,支持分类过滤和排序 - 权限控制全面覆盖管理接口,保证安全访问 feat(auth): 完善用户登录注册及权限相关接口与页面 - 实现手机号验证码发送及校验功能,保障注册安全 - 支持手机号注册、登录及退出接口,集成日志记录 - 增加修改密码功能,验证原密码后更新 - 提供动态导航菜单接口,基于权限展示不同菜单 - 实现管理界面路由及日志、角色、字典管理页面访问权限控制 - 添加系统日志查询接口,支持关键词和等级筛选 feat(app): 初始化Flask应用并配置蓝图与数据库 - 创建应用程序工厂,加载配置,初始化数据库和Redis客户端 - 注册认证、API及管理员蓝图,整合路由 - 根路由渲染主页模板 - 应用上下文中自动创建数据库表,保证运行环境准备完毕 feat(database): 提供数据库创建与迁移支持脚本 - 新增数据库创建脚本,支持自动检测是否已存在 - 添加数据库表初始化脚本,支持创建和删除所有表 - 实现RBAC权限初始化,包含基础权限和角色创建 - 新增字段手动修复脚本,添加用户API Key和积分字段 - 强制迁移脚本支持清理连接和修复表结构,初始化默认数据及角色分配 feat(config): 新增系统配置参数 - 配置数据库、Redis、Session和MinIO相关参数 - 添加AI接口地址及试用Key配置 - 集成阿里云短信服务配置及开发模式相关参数 feat(extensions): 初始化数据库、Redis和MinIO客户端 - 创建全局SQLAlchemy数据库实例和Redis客户端 - 配置基于boto3的MinIO兼容S3客户端 chore(logs): 添加示例系统日志文件 - 记录用户请求、验证码发送成功与失败的日志信息
171 lines
5.5 KiB
Python
171 lines
5.5 KiB
Python
from __future__ import annotations
|
|
|
|
import json as _json
|
|
import typing as t
|
|
|
|
from ..globals import current_app
|
|
from .provider import _default
|
|
|
|
if t.TYPE_CHECKING: # pragma: no cover
|
|
from ..wrappers import Response
|
|
|
|
|
|
def dumps(obj: t.Any, **kwargs: t.Any) -> str:
|
|
"""Serialize data as JSON.
|
|
|
|
If :data:`~flask.current_app` is available, it will use its
|
|
:meth:`app.json.dumps() <flask.json.provider.JSONProvider.dumps>`
|
|
method, otherwise it will use :func:`json.dumps`.
|
|
|
|
:param obj: The data to serialize.
|
|
:param kwargs: Arguments passed to the ``dumps`` implementation.
|
|
|
|
.. versionchanged:: 2.3
|
|
The ``app`` parameter was removed.
|
|
|
|
.. versionchanged:: 2.2
|
|
Calls ``current_app.json.dumps``, allowing an app to override
|
|
the behavior.
|
|
|
|
.. versionchanged:: 2.0.2
|
|
:class:`decimal.Decimal` is supported by converting to a string.
|
|
|
|
.. versionchanged:: 2.0
|
|
``encoding`` will be removed in Flask 2.1.
|
|
|
|
.. versionchanged:: 1.0.3
|
|
``app`` can be passed directly, rather than requiring an app
|
|
context for configuration.
|
|
"""
|
|
if current_app:
|
|
return current_app.json.dumps(obj, **kwargs)
|
|
|
|
kwargs.setdefault("default", _default)
|
|
return _json.dumps(obj, **kwargs)
|
|
|
|
|
|
def dump(obj: t.Any, fp: t.IO[str], **kwargs: t.Any) -> None:
|
|
"""Serialize data as JSON and write to a file.
|
|
|
|
If :data:`~flask.current_app` is available, it will use its
|
|
:meth:`app.json.dump() <flask.json.provider.JSONProvider.dump>`
|
|
method, otherwise it will use :func:`json.dump`.
|
|
|
|
:param obj: The data to serialize.
|
|
:param fp: A file opened for writing text. Should use the UTF-8
|
|
encoding to be valid JSON.
|
|
:param kwargs: Arguments passed to the ``dump`` implementation.
|
|
|
|
.. versionchanged:: 2.3
|
|
The ``app`` parameter was removed.
|
|
|
|
.. versionchanged:: 2.2
|
|
Calls ``current_app.json.dump``, allowing an app to override
|
|
the behavior.
|
|
|
|
.. versionchanged:: 2.0
|
|
Writing to a binary file, and the ``encoding`` argument, will be
|
|
removed in Flask 2.1.
|
|
"""
|
|
if current_app:
|
|
current_app.json.dump(obj, fp, **kwargs)
|
|
else:
|
|
kwargs.setdefault("default", _default)
|
|
_json.dump(obj, fp, **kwargs)
|
|
|
|
|
|
def loads(s: str | bytes, **kwargs: t.Any) -> t.Any:
|
|
"""Deserialize data as JSON.
|
|
|
|
If :data:`~flask.current_app` is available, it will use its
|
|
:meth:`app.json.loads() <flask.json.provider.JSONProvider.loads>`
|
|
method, otherwise it will use :func:`json.loads`.
|
|
|
|
:param s: Text or UTF-8 bytes.
|
|
:param kwargs: Arguments passed to the ``loads`` implementation.
|
|
|
|
.. versionchanged:: 2.3
|
|
The ``app`` parameter was removed.
|
|
|
|
.. versionchanged:: 2.2
|
|
Calls ``current_app.json.loads``, allowing an app to override
|
|
the behavior.
|
|
|
|
.. versionchanged:: 2.0
|
|
``encoding`` will be removed in Flask 2.1. The data must be a
|
|
string or UTF-8 bytes.
|
|
|
|
.. versionchanged:: 1.0.3
|
|
``app`` can be passed directly, rather than requiring an app
|
|
context for configuration.
|
|
"""
|
|
if current_app:
|
|
return current_app.json.loads(s, **kwargs)
|
|
|
|
return _json.loads(s, **kwargs)
|
|
|
|
|
|
def load(fp: t.IO[t.AnyStr], **kwargs: t.Any) -> t.Any:
|
|
"""Deserialize data as JSON read from a file.
|
|
|
|
If :data:`~flask.current_app` is available, it will use its
|
|
:meth:`app.json.load() <flask.json.provider.JSONProvider.load>`
|
|
method, otherwise it will use :func:`json.load`.
|
|
|
|
:param fp: A file opened for reading text or UTF-8 bytes.
|
|
:param kwargs: Arguments passed to the ``load`` implementation.
|
|
|
|
.. versionchanged:: 2.3
|
|
The ``app`` parameter was removed.
|
|
|
|
.. versionchanged:: 2.2
|
|
Calls ``current_app.json.load``, allowing an app to override
|
|
the behavior.
|
|
|
|
.. versionchanged:: 2.2
|
|
The ``app`` parameter will be removed in Flask 2.3.
|
|
|
|
.. versionchanged:: 2.0
|
|
``encoding`` will be removed in Flask 2.1. The file must be text
|
|
mode, or binary mode with UTF-8 bytes.
|
|
"""
|
|
if current_app:
|
|
return current_app.json.load(fp, **kwargs)
|
|
|
|
return _json.load(fp, **kwargs)
|
|
|
|
|
|
def jsonify(*args: t.Any, **kwargs: t.Any) -> Response:
|
|
"""Serialize the given arguments as JSON, and return a
|
|
:class:`~flask.Response` object with the ``application/json``
|
|
mimetype. A dict or list returned from a view will be converted to a
|
|
JSON response automatically without needing to call this.
|
|
|
|
This requires an active request or application context, and calls
|
|
:meth:`app.json.response() <flask.json.provider.JSONProvider.response>`.
|
|
|
|
In debug mode, the output is formatted with indentation to make it
|
|
easier to read. This may also be controlled by the provider.
|
|
|
|
Either positional or keyword arguments can be given, not both.
|
|
If no arguments are given, ``None`` is serialized.
|
|
|
|
:param args: A single value to serialize, or multiple values to
|
|
treat as a list to serialize.
|
|
:param kwargs: Treat as a dict to serialize.
|
|
|
|
.. versionchanged:: 2.2
|
|
Calls ``current_app.json.response``, allowing an app to override
|
|
the behavior.
|
|
|
|
.. versionchanged:: 2.0.2
|
|
:class:`decimal.Decimal` is supported by converting to a string.
|
|
|
|
.. versionchanged:: 0.11
|
|
Added support for serializing top-level arrays. This was a
|
|
security risk in ancient browsers. See :ref:`security-json`.
|
|
|
|
.. versionadded:: 0.2
|
|
"""
|
|
return current_app.json.response(*args, **kwargs) # type: ignore[return-value]
|