- 新增图像生成接口,支持试用、积分和自定义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): 添加示例系统日志文件 - 记录用户请求、验证码发送成功与失败的日志信息
199 lines
6.8 KiB
Python
199 lines
6.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
# This file is auto-generated, don't edit it. Thanks.
|
|
from Tea.model import TeaModel
|
|
from typing import Dict
|
|
|
|
|
|
class ExtendsParameters(TeaModel):
|
|
def __init__(
|
|
self,
|
|
headers: Dict[str, str] = None,
|
|
queries: Dict[str, str] = None,
|
|
):
|
|
self.headers = headers
|
|
self.queries = queries
|
|
|
|
def validate(self):
|
|
pass
|
|
|
|
def to_map(self):
|
|
_map = super().to_map()
|
|
if _map is not None:
|
|
return _map
|
|
|
|
result = dict()
|
|
if self.headers is not None:
|
|
result['headers'] = self.headers
|
|
if self.queries is not None:
|
|
result['queries'] = self.queries
|
|
return result
|
|
|
|
def from_map(self, m: dict = None):
|
|
m = m or dict()
|
|
if m.get('headers') is not None:
|
|
self.headers = m.get('headers')
|
|
if m.get('queries') is not None:
|
|
self.queries = m.get('queries')
|
|
return self
|
|
|
|
|
|
class RuntimeOptions(TeaModel):
|
|
"""
|
|
The common runtime options model
|
|
"""
|
|
def __init__(
|
|
self,
|
|
autoretry: bool = None,
|
|
ignore_ssl: bool = None,
|
|
max_attempts: int = None,
|
|
backoff_policy: str = None,
|
|
backoff_period: int = None,
|
|
read_timeout: int = None,
|
|
connect_timeout: int = None,
|
|
http_proxy: str = None,
|
|
https_proxy: str = None,
|
|
no_proxy: str = None,
|
|
max_idle_conns: int = None,
|
|
local_addr: str = None,
|
|
socks_5proxy: str = None,
|
|
socks_5net_work: str = None,
|
|
keep_alive: bool = None,
|
|
key: str = None,
|
|
cert: str = None,
|
|
ca: str = None,
|
|
extends_parameters: ExtendsParameters = None,
|
|
):
|
|
# whether to try again
|
|
self.autoretry = autoretry
|
|
# ignore SSL validation
|
|
self.ignore_ssl = ignore_ssl
|
|
# privite key for client certificate
|
|
self.key = key
|
|
# client certificate
|
|
self.cert = cert
|
|
# server certificate
|
|
self.ca = ca
|
|
# maximum number of retries
|
|
self.max_attempts = max_attempts
|
|
# backoff policy
|
|
self.backoff_policy = backoff_policy
|
|
# backoff period
|
|
self.backoff_period = backoff_period
|
|
# read timeout
|
|
self.read_timeout = read_timeout
|
|
# connect timeout
|
|
self.connect_timeout = connect_timeout
|
|
# http proxy url
|
|
self.http_proxy = http_proxy
|
|
# https Proxy url
|
|
self.https_proxy = https_proxy
|
|
# agent blacklist
|
|
self.no_proxy = no_proxy
|
|
# maximum number of connections
|
|
self.max_idle_conns = max_idle_conns
|
|
# local addr
|
|
self.local_addr = local_addr
|
|
# SOCKS5 proxy
|
|
self.socks_5proxy = socks_5proxy
|
|
# SOCKS5 netWork
|
|
self.socks_5net_work = socks_5net_work
|
|
# whether to enable keep-alive
|
|
self.keep_alive = keep_alive
|
|
# Extends Parameters
|
|
self.extends_parameters = extends_parameters
|
|
|
|
def validate(self):
|
|
if self.extends_parameters:
|
|
self.extends_parameters.validate()
|
|
|
|
def to_map(self):
|
|
_map = super().to_map()
|
|
if _map is not None:
|
|
return _map
|
|
|
|
result = dict()
|
|
if self.autoretry is not None:
|
|
result['autoretry'] = self.autoretry
|
|
if self.ignore_ssl is not None:
|
|
result['ignoreSSL'] = self.ignore_ssl
|
|
if self.key is not None:
|
|
result['key'] = self.key
|
|
if self.cert is not None:
|
|
result['cert'] = self.cert
|
|
if self.ca is not None:
|
|
result['ca'] = self.ca
|
|
if self.max_attempts is not None:
|
|
result['max_attempts'] = self.max_attempts
|
|
if self.backoff_policy is not None:
|
|
result['backoff_policy'] = self.backoff_policy
|
|
if self.backoff_period is not None:
|
|
result['backoff_period'] = self.backoff_period
|
|
if self.read_timeout is not None:
|
|
result['readTimeout'] = self.read_timeout
|
|
if self.connect_timeout is not None:
|
|
result['connectTimeout'] = self.connect_timeout
|
|
if self.http_proxy is not None:
|
|
result['httpProxy'] = self.http_proxy
|
|
if self.https_proxy is not None:
|
|
result['httpsProxy'] = self.https_proxy
|
|
if self.no_proxy is not None:
|
|
result['noProxy'] = self.no_proxy
|
|
if self.max_idle_conns is not None:
|
|
result['maxIdleConns'] = self.max_idle_conns
|
|
if self.local_addr is not None:
|
|
result['localAddr'] = self.local_addr
|
|
if self.socks_5proxy is not None:
|
|
result['socks5Proxy'] = self.socks_5proxy
|
|
if self.socks_5net_work is not None:
|
|
result['socks5NetWork'] = self.socks_5net_work
|
|
if self.keep_alive is not None:
|
|
result['keepAlive'] = self.keep_alive
|
|
if self.extends_parameters is not None:
|
|
result['extendsParameters'] = self.extends_parameters.to_map()
|
|
return result
|
|
|
|
def from_map(self, m: dict = None):
|
|
m = m or dict()
|
|
if m.get('autoretry') is not None:
|
|
self.autoretry = m.get('autoretry')
|
|
if m.get('ignoreSSL') is not None:
|
|
self.ignore_ssl = m.get('ignoreSSL')
|
|
if m.get('key') is not None:
|
|
self.key = m.get('key')
|
|
if m.get('cert') is not None:
|
|
self.cert = m.get('cert')
|
|
if m.get('ca') is not None:
|
|
self.ca = m.get('ca')
|
|
if m.get('max_attempts') is not None:
|
|
self.max_attempts = m.get('max_attempts')
|
|
if m.get('backoff_policy') is not None:
|
|
self.backoff_policy = m.get('backoff_policy')
|
|
if m.get('backoff_period') is not None:
|
|
self.backoff_period = m.get('backoff_period')
|
|
if m.get('readTimeout') is not None:
|
|
self.read_timeout = m.get('readTimeout')
|
|
if m.get('connectTimeout') is not None:
|
|
self.connect_timeout = m.get('connectTimeout')
|
|
if m.get('httpProxy') is not None:
|
|
self.http_proxy = m.get('httpProxy')
|
|
if m.get('httpsProxy') is not None:
|
|
self.https_proxy = m.get('httpsProxy')
|
|
if m.get('noProxy') is not None:
|
|
self.no_proxy = m.get('noProxy')
|
|
if m.get('maxIdleConns') is not None:
|
|
self.max_idle_conns = m.get('maxIdleConns')
|
|
if m.get('localAddr') is not None:
|
|
self.local_addr = m.get('localAddr')
|
|
if m.get('socks5Proxy') is not None:
|
|
self.socks_5proxy = m.get('socks5Proxy')
|
|
if m.get('socks5NetWork') is not None:
|
|
self.socks_5net_work = m.get('socks5NetWork')
|
|
if m.get('keepAlive') is not None:
|
|
self.keep_alive = m.get('keepAlive')
|
|
if m.get('extendsParameters') is not None:
|
|
temp_model = ExtendsParameters()
|
|
self.extends_parameters = temp_model.from_map(m['extendsParameters'])
|
|
return self
|
|
|
|
|