chore: 将validate_annotation封装为pydantic-validation-decorator库
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
from fastapi import FastAPI, Request
|
from fastapi import FastAPI, Request
|
||||||
from fastapi.exceptions import HTTPException
|
from fastapi.exceptions import HTTPException
|
||||||
from exceptions.exception import AuthException, PermissionException, ModelValidatorException, FieldValidatorException
|
from pydantic_validation_decorator import FieldValidationError
|
||||||
|
from exceptions.exception import AuthException, PermissionException, ModelValidatorException
|
||||||
from utils.response_util import ResponseUtil, JSONResponse, jsonable_encoder
|
from utils.response_util import ResponseUtil, JSONResponse, jsonable_encoder
|
||||||
|
|
||||||
|
|
||||||
@@ -24,9 +25,9 @@ def handle_exception(app: FastAPI):
|
|||||||
return ResponseUtil.failure(data=exc.data, msg=exc.message)
|
return ResponseUtil.failure(data=exc.data, msg=exc.message)
|
||||||
|
|
||||||
# 自定义模型检验异常
|
# 自定义模型检验异常
|
||||||
@app.exception_handler(FieldValidatorException)
|
@app.exception_handler(FieldValidationError)
|
||||||
async def field_validator_exception_handler(request: Request, exc: FieldValidatorException):
|
async def field_validation_error_handler(request: Request, exc: FieldValidationError):
|
||||||
return ResponseUtil.failure(data=exc.data, msg=exc.message)
|
return ResponseUtil.failure(msg=exc.message)
|
||||||
|
|
||||||
# 处理其他http请求异常
|
# 处理其他http请求异常
|
||||||
@app.exception_handler(HTTPException)
|
@app.exception_handler(HTTPException)
|
||||||
|
@@ -1,293 +0,0 @@
|
|||||||
import re
|
|
||||||
from functools import wraps
|
|
||||||
from typing import Literal, Optional
|
|
||||||
from pydantic import (
|
|
||||||
BaseModel,
|
|
||||||
Field,
|
|
||||||
AnyUrl,
|
|
||||||
AnyHttpUrl,
|
|
||||||
HttpUrl,
|
|
||||||
AnyWebsocketUrl,
|
|
||||||
WebsocketUrl,
|
|
||||||
FileUrl,
|
|
||||||
FtpUrl,
|
|
||||||
PostgresDsn,
|
|
||||||
CockroachDsn,
|
|
||||||
AmqpDsn,
|
|
||||||
RedisDsn,
|
|
||||||
MongoDsn,
|
|
||||||
KafkaDsn,
|
|
||||||
NatsDsn,
|
|
||||||
MySQLDsn,
|
|
||||||
MariaDBDsn,
|
|
||||||
ClickHouseDsn,
|
|
||||||
EmailStr,
|
|
||||||
NameEmail,
|
|
||||||
IPvAnyAddress,
|
|
||||||
ValidationError
|
|
||||||
)
|
|
||||||
from exceptions.exception import FieldValidatorException
|
|
||||||
from utils.string_util import StringUtil
|
|
||||||
|
|
||||||
|
|
||||||
class NetWorkAnnotationModel(BaseModel):
|
|
||||||
any_url: Optional[AnyUrl] = Field(default=None, description='接受任何URL类型')
|
|
||||||
any_http_url: Optional[AnyHttpUrl] = Field(default=None, description='接受任何http或https URL的类型')
|
|
||||||
http_url: Optional[HttpUrl] = Field(default=None, description='接受任何最大长度2083 & http或https URL的类型')
|
|
||||||
any_websocket_url: Optional[AnyWebsocketUrl] = Field(default=None, description='接受任何ws或wss URL的类型')
|
|
||||||
websocket_url: Optional[WebsocketUrl] = Field(default=None, description='接受任何最大长度 2083 & ws或wss URL的类型')
|
|
||||||
file_url: Optional[FileUrl] = Field(default=None, description='接受任何文件URL的类型')
|
|
||||||
ftp_url: Optional[FtpUrl] = Field(default=None, description='接受ftp URL的类型')
|
|
||||||
postgres_dsn: Optional[PostgresDsn] = Field(default=None, description='接受任何Postgres DSN的类型')
|
|
||||||
cockroach_dsn: Optional[CockroachDsn] = Field(default=None, description='接受任何Cockroach DSN的类型')
|
|
||||||
amqp_dsn: Optional[AmqpDsn] = Field(default=None, description='接受任何AMQP DSN的类型')
|
|
||||||
redis_dsn: Optional[RedisDsn] = Field(default=None, description='接受任何Redis DSN的类型')
|
|
||||||
mongo_dsn: Optional[MongoDsn] = Field(default=None, description='接受任何MongoDB DSN的类型')
|
|
||||||
kafka_dsn: Optional[KafkaDsn] = Field(default=None, description='接受任何Kafka DSN的类型')
|
|
||||||
nats_dsn: Optional[NatsDsn] = Field(default=None, description='接受任何NATS DSN的类型')
|
|
||||||
mysql_dsn: Optional[MySQLDsn] = Field(default=None, description='接受任何MySQL DSN的类型')
|
|
||||||
mariadb_dsn: Optional[MariaDBDsn] = Field(default=None, description='接受任何MariaDB DSN的类型')
|
|
||||||
clickhouse_dsn: Optional[ClickHouseDsn] = Field(default=None, description='接受任何ClickHouse DSN的类型')
|
|
||||||
email_str: Optional[EmailStr] = Field(default=None, description='验证电子邮件地址')
|
|
||||||
name_email: Optional[NameEmail] = Field(default=None, description='验证RFC 5322指定的名称和电子邮件地址组合')
|
|
||||||
ipv_any_address: Optional[IPvAnyAddress] = Field(default=None, description='验证IPv4或IPv6地址')
|
|
||||||
|
|
||||||
|
|
||||||
class ValidateFields:
|
|
||||||
"""
|
|
||||||
字段校验装饰器
|
|
||||||
"""
|
|
||||||
def __init__(self, validate_model: str, validate_function: str = 'validate_fields'):
|
|
||||||
"""
|
|
||||||
字段校验装饰器
|
|
||||||
:param validate_model: 需要校验的pydantic模型在函数中的名称
|
|
||||||
:param validate_function: pydantic模型中定义的校验函数名称
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
self.validate_model = validate_model
|
|
||||||
self.validate_function = validate_function
|
|
||||||
|
|
||||||
def __call__(self, func):
|
|
||||||
@wraps(func)
|
|
||||||
async def wrapper(*args, **kwargs):
|
|
||||||
validate_model = kwargs.get(self.validate_model)
|
|
||||||
if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.validate_function):
|
|
||||||
validate_function = getattr(validate_model, self.validate_function)
|
|
||||||
if validate_function is not None and callable(validate_function):
|
|
||||||
validate_function()
|
|
||||||
return await func(*args, **kwargs)
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
class NetWork:
|
|
||||||
"""
|
|
||||||
字段网络类型校验装饰器
|
|
||||||
"""
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
field_name: str,
|
|
||||||
field_type: Literal['AnyUrl', 'AnyHttpUrl', 'HttpUrl', 'AnyWebsocketUrl', 'WebsocketUrl', 'FileUrl',
|
|
||||||
'FtpUrl', 'PostgresDsn', 'CockroachDsn', 'AmqpDsn', 'RedisDsn', 'MongoDsn', 'KafkaDsn',
|
|
||||||
'NatsDsn', 'MySQLDsn', 'MariaDBDsn', 'ClickHouseDsn', 'EmailStr', 'NameEmail',
|
|
||||||
'IPvAnyAddress'],
|
|
||||||
message: Optional[str] = None
|
|
||||||
):
|
|
||||||
"""
|
|
||||||
字段网络类型校验装饰器
|
|
||||||
:param field_name: 需要校验的字段名称
|
|
||||||
:param field_type: 需要校验的字段类型
|
|
||||||
:param message: 校验失败的提示信息
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
self.field_name = field_name
|
|
||||||
self.field_type = field_type
|
|
||||||
self.message = message
|
|
||||||
|
|
||||||
def __call__(self, func):
|
|
||||||
@wraps(func)
|
|
||||||
def wrapper(*args, **kwargs):
|
|
||||||
validate_model = args[0]
|
|
||||||
if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.field_name):
|
|
||||||
field_value = getattr(validate_model, self.field_name)
|
|
||||||
if field_value:
|
|
||||||
try:
|
|
||||||
if self.field_type == 'AnyUrl':
|
|
||||||
NetWorkAnnotationModel(any_url=field_value)
|
|
||||||
elif self.field_type == 'AnyHttpUrl':
|
|
||||||
NetWorkAnnotationModel(any_http_url=field_value)
|
|
||||||
elif self.field_type == 'HttpUrl':
|
|
||||||
NetWorkAnnotationModel(http_url=field_value)
|
|
||||||
elif self.field_type == 'AnyWebsocketUrl':
|
|
||||||
NetWorkAnnotationModel(any_websocket_url=field_value)
|
|
||||||
elif self.field_type == 'WebsocketUrl':
|
|
||||||
NetWorkAnnotationModel(websocket_url=field_value)
|
|
||||||
elif self.field_type == 'FileUrl':
|
|
||||||
NetWorkAnnotationModel(file_url=field_value)
|
|
||||||
elif self.field_type == 'FtpUrl':
|
|
||||||
NetWorkAnnotationModel(ftp_url=field_value)
|
|
||||||
elif self.field_type == 'PostgresDsn':
|
|
||||||
NetWorkAnnotationModel(postgres_dsn=field_value)
|
|
||||||
elif self.field_type == 'CockroachDsn':
|
|
||||||
NetWorkAnnotationModel(cockroach_dsn=field_value)
|
|
||||||
elif self.field_type == 'AmqpDsn':
|
|
||||||
NetWorkAnnotationModel(amqp_dsn=field_value)
|
|
||||||
elif self.field_type == 'RedisDsn':
|
|
||||||
NetWorkAnnotationModel(redis_dsn=field_value)
|
|
||||||
elif self.field_type == 'MongoDsn':
|
|
||||||
NetWorkAnnotationModel(mongo_dsn=field_value)
|
|
||||||
elif self.field_type == 'KafkaDsn':
|
|
||||||
NetWorkAnnotationModel(kafka_dsn=field_value)
|
|
||||||
elif self.field_type == 'NatsDsn':
|
|
||||||
NetWorkAnnotationModel(nats_dsn=field_value)
|
|
||||||
elif self.field_type == 'MySQLDsn':
|
|
||||||
NetWorkAnnotationModel(mysql_dsn=field_value)
|
|
||||||
elif self.field_type == 'MariaDBDsn':
|
|
||||||
NetWorkAnnotationModel(mariadb_dsn=field_value)
|
|
||||||
elif self.field_type == 'ClickHouseDsn':
|
|
||||||
NetWorkAnnotationModel(clickhouse_dsn=field_value)
|
|
||||||
elif self.field_type == 'EmailStr':
|
|
||||||
NetWorkAnnotationModel(email_str=field_value)
|
|
||||||
elif self.field_type == 'NameEmail':
|
|
||||||
NetWorkAnnotationModel(name_email=field_value)
|
|
||||||
elif self.field_type == 'IPvAnyAddress':
|
|
||||||
NetWorkAnnotationModel(ipv_any_address=field_value)
|
|
||||||
except (ValidationError, ValueError):
|
|
||||||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}不是正确的{self.field_type}类型')
|
|
||||||
return func(*args, **kwargs)
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
class NotBlank:
|
|
||||||
"""
|
|
||||||
字段非空校验装饰器
|
|
||||||
"""
|
|
||||||
def __init__(self, field_name: str, message: Optional[str] = None):
|
|
||||||
"""
|
|
||||||
字段非空校验装饰器
|
|
||||||
:param field_name: 需要校验的字段名称
|
|
||||||
:param message: 校验失败的提示信息
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
self.field_name = field_name
|
|
||||||
self.message = message
|
|
||||||
|
|
||||||
def __call__(self, func):
|
|
||||||
@wraps(func)
|
|
||||||
def wrapper(*args, **kwargs):
|
|
||||||
validate_model = args[0]
|
|
||||||
if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.field_name):
|
|
||||||
field_value = getattr(validate_model, self.field_name)
|
|
||||||
if field_value is None or field_value == '' or field_value == [] or field_value == () or field_value == {}:
|
|
||||||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}不能为空')
|
|
||||||
return func(*args, **kwargs)
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
class Pattern:
|
|
||||||
"""
|
|
||||||
字段正则校验装饰器
|
|
||||||
"""
|
|
||||||
def __init__(self, field_name: str, regexp: str, message: Optional[str] = None):
|
|
||||||
"""
|
|
||||||
字段正则校验装饰器
|
|
||||||
:param field_name: 需要校验的字段名称
|
|
||||||
:param regexp: 正则表达式
|
|
||||||
:param message: 校验失败的提示信息
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
self.field_name = field_name
|
|
||||||
self.regexp = regexp
|
|
||||||
self.message = message
|
|
||||||
|
|
||||||
def __call__(self, func):
|
|
||||||
@wraps(func)
|
|
||||||
def wrapper(*args, **kwargs):
|
|
||||||
validate_model = args[0]
|
|
||||||
if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.field_name):
|
|
||||||
field_value = getattr(validate_model, self.field_name)
|
|
||||||
if isinstance(field_value, str) and not re.match(self.regexp, field_value):
|
|
||||||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}格式不正确')
|
|
||||||
return func(*args, **kwargs)
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
class Size:
|
|
||||||
"""
|
|
||||||
字段大小校验装饰器
|
|
||||||
"""
|
|
||||||
def __init__(self, field_name: str, gt: Optional[float] = None, ge: Optional[float] = None,
|
|
||||||
lt: Optional[float] = None, le: Optional[float] = None, min_length: Optional[int] = 0,
|
|
||||||
max_length: Optional[int] = None, message: Optional[str] = None):
|
|
||||||
"""
|
|
||||||
字段大小校验装饰器
|
|
||||||
:param field_name: 需要校验的字段名称
|
|
||||||
:param gt: 数字型字段值必须要大于gt
|
|
||||||
:param ge: 数字型字段值必须要大于等于ge
|
|
||||||
:param lt: 数字型字段值必须要小于ge
|
|
||||||
:param le: 数字型字段值必须要小于等于ge
|
|
||||||
:param min_length: 字符串型字段长度不能小于min_length
|
|
||||||
:param max_length: 字符串型字段长度不能大于max_length
|
|
||||||
:param message: 校验失败的提示信息
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
self.field_name = field_name
|
|
||||||
self.gt = gt
|
|
||||||
self.ge = ge
|
|
||||||
self.lt = lt
|
|
||||||
self.le = le
|
|
||||||
self.min_length = min_length if min_length >= 0 else 0
|
|
||||||
self.max_length = max_length
|
|
||||||
self.message = message
|
|
||||||
|
|
||||||
def __call__(self, func):
|
|
||||||
@wraps(func)
|
|
||||||
def wrapper(*args, **kwargs):
|
|
||||||
validate_model = args[0]
|
|
||||||
if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.field_name):
|
|
||||||
field_value = getattr(validate_model, self.field_name)
|
|
||||||
if isinstance(field_value, float):
|
|
||||||
if self.gt is not None and field_value <= self.gt:
|
|
||||||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}必须大于{self.gt}')
|
|
||||||
elif self.ge is not None and field_value < self.ge:
|
|
||||||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}必须大于等于{self.ge}')
|
|
||||||
elif self.lt is not None and field_value >= self.lt:
|
|
||||||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}必须小于{self.lt}')
|
|
||||||
elif self.le is not None and field_value > self.le:
|
|
||||||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}必须小于等于{self.le}')
|
|
||||||
elif isinstance(field_value, str):
|
|
||||||
if len(field_value) < self.min_length:
|
|
||||||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}长度不能小于{self.min_length}')
|
|
||||||
elif self.max_length is not None and len(field_value) > self.max_length:
|
|
||||||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}长度不能大于{self.max_length}')
|
|
||||||
return func(*args, **kwargs)
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
class Xss:
|
|
||||||
"""
|
|
||||||
字段Xss校验装饰器
|
|
||||||
"""
|
|
||||||
HTML_PATTERN = '<(\S*?)[^>]*>.*?|<.*? />'
|
|
||||||
|
|
||||||
def __init__(self, field_name: str, message: Optional[str] = None):
|
|
||||||
"""
|
|
||||||
字段Xss校验装饰器
|
|
||||||
:param field_name: 需要校验的字段名称
|
|
||||||
:param message: 校验失败的提示信息
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
self.field_name = field_name
|
|
||||||
self.message = message
|
|
||||||
|
|
||||||
def __call__(self, func):
|
|
||||||
@wraps(func)
|
|
||||||
def wrapper(*args, **kwargs):
|
|
||||||
validate_model = args[0]
|
|
||||||
if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.field_name):
|
|
||||||
field_value = getattr(validate_model, self.field_name)
|
|
||||||
if not StringUtil.is_blank(field_value):
|
|
||||||
pattern = re.compile(self.HTML_PATTERN)
|
|
||||||
if pattern.search(field_value):
|
|
||||||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}不能包含脚本字符')
|
|
||||||
return func(*args, **kwargs)
|
|
||||||
return wrapper
|
|
@@ -1,11 +1,11 @@
|
|||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
from module_admin.service.login_service import LoginService, CurrentUserModel
|
from module_admin.service.login_service import LoginService, CurrentUserModel
|
||||||
from module_admin.service.config_service import *
|
from module_admin.service.config_service import *
|
||||||
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
||||||
from module_admin.annotation.log_annotation import log_decorator
|
from module_admin.annotation.log_annotation import log_decorator
|
||||||
from module_admin.annotation.validate_annotation import ValidateFields
|
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
from utils.response_util import *
|
from utils.response_util import *
|
||||||
from utils.log_util import *
|
from utils.log_util import *
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
from fastapi import APIRouter, Request
|
from fastapi import APIRouter, Request
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
from module_admin.service.login_service import LoginService, CurrentUserModel
|
from module_admin.service.login_service import LoginService, CurrentUserModel
|
||||||
from module_admin.service.dept_service import *
|
from module_admin.service.dept_service import *
|
||||||
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
||||||
from module_admin.aspect.data_scope import GetDataScope
|
from module_admin.aspect.data_scope import GetDataScope
|
||||||
from module_admin.annotation.log_annotation import log_decorator
|
from module_admin.annotation.log_annotation import log_decorator
|
||||||
from module_admin.annotation.validate_annotation import ValidateFields
|
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
from utils.response_util import *
|
from utils.response_util import *
|
||||||
from utils.log_util import *
|
from utils.log_util import *
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
from module_admin.service.login_service import LoginService, CurrentUserModel
|
from module_admin.service.login_service import LoginService, CurrentUserModel
|
||||||
from module_admin.service.dict_service import *
|
from module_admin.service.dict_service import *
|
||||||
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
||||||
from module_admin.annotation.log_annotation import log_decorator
|
from module_admin.annotation.log_annotation import log_decorator
|
||||||
from module_admin.annotation.validate_annotation import ValidateFields
|
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
from utils.response_util import *
|
from utils.response_util import *
|
||||||
from utils.log_util import *
|
from utils.log_util import *
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
from module_admin.service.login_service import LoginService, CurrentUserModel
|
from module_admin.service.login_service import LoginService, CurrentUserModel
|
||||||
from module_admin.service.job_service import *
|
from module_admin.service.job_service import *
|
||||||
from module_admin.service.job_log_service import *
|
from module_admin.service.job_log_service import *
|
||||||
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
||||||
from module_admin.annotation.log_annotation import log_decorator
|
from module_admin.annotation.log_annotation import log_decorator
|
||||||
from module_admin.annotation.validate_annotation import ValidateFields
|
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
from utils.response_util import *
|
from utils.response_util import *
|
||||||
from utils.log_util import *
|
from utils.log_util import *
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
from fastapi import APIRouter, Request
|
from fastapi import APIRouter, Request
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
from module_admin.service.login_service import LoginService
|
from module_admin.service.login_service import LoginService
|
||||||
from module_admin.service.menu_service import *
|
from module_admin.service.menu_service import *
|
||||||
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
||||||
from module_admin.annotation.log_annotation import log_decorator
|
from module_admin.annotation.log_annotation import log_decorator
|
||||||
from module_admin.annotation.validate_annotation import ValidateFields
|
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
from utils.response_util import *
|
from utils.response_util import *
|
||||||
from utils.log_util import *
|
from utils.log_util import *
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
from fastapi import APIRouter, Request
|
from fastapi import APIRouter, Request
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
from module_admin.service.login_service import LoginService, CurrentUserModel
|
from module_admin.service.login_service import LoginService, CurrentUserModel
|
||||||
from module_admin.service.notice_service import *
|
from module_admin.service.notice_service import *
|
||||||
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
||||||
from module_admin.annotation.log_annotation import log_decorator
|
from module_admin.annotation.log_annotation import log_decorator
|
||||||
from module_admin.annotation.validate_annotation import ValidateFields
|
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
from utils.response_util import *
|
from utils.response_util import *
|
||||||
from utils.log_util import *
|
from utils.log_util import *
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
from fastapi import APIRouter, Request
|
from fastapi import APIRouter, Request
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
from module_admin.service.login_service import LoginService, CurrentUserModel
|
from module_admin.service.login_service import LoginService, CurrentUserModel
|
||||||
from module_admin.service.post_service import *
|
from module_admin.service.post_service import *
|
||||||
from module_admin.entity.vo.post_vo import *
|
from module_admin.entity.vo.post_vo import *
|
||||||
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
||||||
from module_admin.annotation.log_annotation import log_decorator
|
from module_admin.annotation.log_annotation import log_decorator
|
||||||
from module_admin.annotation.validate_annotation import ValidateFields
|
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
from utils.response_util import *
|
from utils.response_util import *
|
||||||
from utils.log_util import *
|
from utils.log_util import *
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
from fastapi import APIRouter, Request
|
from fastapi import APIRouter, Request
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
from module_admin.service.login_service import LoginService, CurrentUserModel
|
from module_admin.service.login_service import LoginService, CurrentUserModel
|
||||||
from module_admin.service.role_service import *
|
from module_admin.service.role_service import *
|
||||||
@@ -8,7 +9,6 @@ from module_admin.service.user_service import UserService, UserRoleQueryModel, U
|
|||||||
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
||||||
from module_admin.aspect.data_scope import GetDataScope
|
from module_admin.aspect.data_scope import GetDataScope
|
||||||
from module_admin.annotation.log_annotation import log_decorator
|
from module_admin.annotation.log_annotation import log_decorator
|
||||||
from module_admin.annotation.validate_annotation import ValidateFields
|
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
from utils.response_util import *
|
from utils.response_util import *
|
||||||
from utils.log_util import *
|
from utils.log_util import *
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
from fastapi import APIRouter, Request
|
from fastapi import APIRouter, Request
|
||||||
from fastapi import Depends, File, Query
|
from fastapi import Depends, File, Query
|
||||||
|
from pydantic_validation_decorator import ValidateFields
|
||||||
from config.get_db import get_db
|
from config.get_db import get_db
|
||||||
from config.env import UploadConfig
|
from config.env import UploadConfig
|
||||||
from module_admin.service.login_service import LoginService
|
from module_admin.service.login_service import LoginService
|
||||||
@@ -8,7 +9,6 @@ from module_admin.service.dept_service import DeptService
|
|||||||
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
|
||||||
from module_admin.aspect.data_scope import GetDataScope
|
from module_admin.aspect.data_scope import GetDataScope
|
||||||
from module_admin.annotation.log_annotation import log_decorator
|
from module_admin.annotation.log_annotation import log_decorator
|
||||||
from module_admin.annotation.validate_annotation import ValidateFields
|
|
||||||
from config.enums import BusinessType
|
from config.enums import BusinessType
|
||||||
from utils.page_util import PageResponseModel
|
from utils.page_util import PageResponseModel
|
||||||
from utils.response_util import *
|
from utils.response_util import *
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
from pydantic import BaseModel, ConfigDict, Field
|
from pydantic import BaseModel, ConfigDict, Field
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
|
from pydantic_validation_decorator import NotBlank, Size
|
||||||
from typing import Union, Optional, List, Literal
|
from typing import Union, Optional, List, Literal
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
||||||
from module_admin.annotation.validate_annotation import NotBlank, Size
|
|
||||||
|
|
||||||
|
|
||||||
class ConfigModel(BaseModel):
|
class ConfigModel(BaseModel):
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
from pydantic import BaseModel, ConfigDict, Field
|
from pydantic import BaseModel, ConfigDict, Field
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
|
from pydantic_validation_decorator import Network, NotBlank, Size
|
||||||
from typing import Union, Optional, List, Literal
|
from typing import Union, Optional, List, Literal
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from module_admin.annotation.pydantic_annotation import as_query
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
from module_admin.annotation.validate_annotation import NetWork, NotBlank, Size
|
|
||||||
|
|
||||||
|
|
||||||
class DeptModel(BaseModel):
|
class DeptModel(BaseModel):
|
||||||
@@ -40,7 +40,7 @@ class DeptModel(BaseModel):
|
|||||||
def get_phone(self):
|
def get_phone(self):
|
||||||
return self.phone
|
return self.phone
|
||||||
|
|
||||||
@NetWork(field_name='email', field_type='EmailStr', message='邮箱格式不正确')
|
@Network(field_name='email', field_type='EmailStr', message='邮箱格式不正确')
|
||||||
@Size(field_name='email', min_length=0, max_length=50, message='邮箱长度不能超过50个字符')
|
@Size(field_name='email', min_length=0, max_length=50, message='邮箱长度不能超过50个字符')
|
||||||
def get_email(self):
|
def get_email(self):
|
||||||
return self.email
|
return self.email
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
from pydantic import BaseModel, ConfigDict, Field
|
from pydantic import BaseModel, ConfigDict, Field
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
|
from pydantic_validation_decorator import NotBlank, Pattern, Size
|
||||||
from typing import Union, Optional, List, Literal
|
from typing import Union, Optional, List, Literal
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
||||||
from module_admin.annotation.validate_annotation import NotBlank, Pattern, Size
|
|
||||||
|
|
||||||
|
|
||||||
class DictTypeModel(BaseModel):
|
class DictTypeModel(BaseModel):
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
from pydantic import BaseModel, ConfigDict, Field
|
from pydantic import BaseModel, ConfigDict, Field
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
|
from pydantic_validation_decorator import NotBlank, Size
|
||||||
from typing import Union, Optional, List, Literal
|
from typing import Union, Optional, List, Literal
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
||||||
from module_admin.annotation.validate_annotation import NotBlank, Size
|
|
||||||
|
|
||||||
|
|
||||||
class JobModel(BaseModel):
|
class JobModel(BaseModel):
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
from pydantic import BaseModel, ConfigDict, Field
|
from pydantic import BaseModel, ConfigDict, Field
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
|
from pydantic_validation_decorator import NotBlank, Size
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Union, Optional, List, Literal
|
from typing import Union, Optional, List, Literal
|
||||||
from module_admin.annotation.pydantic_annotation import as_query
|
from module_admin.annotation.pydantic_annotation import as_query
|
||||||
from module_admin.annotation.validate_annotation import NotBlank, Size
|
|
||||||
|
|
||||||
|
|
||||||
class MenuModel(BaseModel):
|
class MenuModel(BaseModel):
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
from pydantic import BaseModel, ConfigDict, Field
|
from pydantic import BaseModel, ConfigDict, Field
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
|
from pydantic_validation_decorator import NotBlank, Size, Xss
|
||||||
from typing import Union, Optional, List, Literal
|
from typing import Union, Optional, List, Literal
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
||||||
from module_admin.annotation.validate_annotation import NotBlank, Size, Xss
|
|
||||||
|
|
||||||
|
|
||||||
class NoticeModel(BaseModel):
|
class NoticeModel(BaseModel):
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
from pydantic import BaseModel, ConfigDict, Field
|
from pydantic import BaseModel, ConfigDict, Field
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
|
from pydantic_validation_decorator import NotBlank, Size
|
||||||
from typing import Union, Optional, List, Literal
|
from typing import Union, Optional, List, Literal
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
||||||
from module_admin.annotation.validate_annotation import NotBlank, Size
|
|
||||||
|
|
||||||
|
|
||||||
class PostModel(BaseModel):
|
class PostModel(BaseModel):
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
|
from pydantic_validation_decorator import NotBlank, Size
|
||||||
from typing import Union, Optional, List, Literal
|
from typing import Union, Optional, List, Literal
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
||||||
from module_admin.annotation.validate_annotation import NotBlank, Size
|
|
||||||
|
|
||||||
|
|
||||||
class RoleModel(BaseModel):
|
class RoleModel(BaseModel):
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
import re
|
import re
|
||||||
from pydantic import BaseModel, Field, ConfigDict, model_validator
|
from pydantic import BaseModel, Field, ConfigDict, model_validator
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
|
from pydantic_validation_decorator import Network, NotBlank, Size, Xss
|
||||||
from typing import Union, Optional, List, Literal
|
from typing import Union, Optional, List, Literal
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from module_admin.entity.vo.role_vo import RoleModel
|
from module_admin.entity.vo.role_vo import RoleModel
|
||||||
from module_admin.entity.vo.dept_vo import DeptModel
|
from module_admin.entity.vo.dept_vo import DeptModel
|
||||||
from module_admin.entity.vo.post_vo import PostModel
|
from module_admin.entity.vo.post_vo import PostModel
|
||||||
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
from module_admin.annotation.pydantic_annotation import as_query, as_form
|
||||||
from module_admin.annotation.validate_annotation import NetWork, NotBlank, Size, Xss
|
|
||||||
from exceptions.exception import ModelValidatorException
|
from exceptions.exception import ModelValidatorException
|
||||||
|
|
||||||
|
|
||||||
@@ -72,7 +72,7 @@ class UserModel(BaseModel):
|
|||||||
def get_nick_name(self):
|
def get_nick_name(self):
|
||||||
return self.nick_name
|
return self.nick_name
|
||||||
|
|
||||||
@NetWork(field_name='email', field_type='EmailStr', message='邮箱格式不正确')
|
@Network(field_name='email', field_type='EmailStr', message='邮箱格式不正确')
|
||||||
@Size(field_name='email', min_length=0, max_length=50, message='邮箱长度不能超过50个字符')
|
@Size(field_name='email', min_length=0, max_length=50, message='邮箱长度不能超过50个字符')
|
||||||
def get_email(self):
|
def get_email(self):
|
||||||
return self.email
|
return self.email
|
||||||
|
@@ -8,6 +8,7 @@ pandas==2.1.4
|
|||||||
passlib[bcrypt]==1.7.4
|
passlib[bcrypt]==1.7.4
|
||||||
Pillow==10.2.0
|
Pillow==10.2.0
|
||||||
psutil==5.9.7
|
psutil==5.9.7
|
||||||
|
pydantic-validation-decorator==0.1.2
|
||||||
PyMySQL==1.1.0
|
PyMySQL==1.1.0
|
||||||
python-jose[cryptography]==3.3.0
|
python-jose[cryptography]==3.3.0
|
||||||
redis==5.0.1
|
redis==5.0.1
|
||||||
|
Reference in New Issue
Block a user