diff --git a/backend/app/database/db_mysql.py b/backend/app/database/db_mysql.py index 3071a947..f895234b 100644 --- a/backend/app/database/db_mysql.py +++ b/backend/app/database/db_mysql.py @@ -2,12 +2,12 @@ # -*- coding: utf-8 -*- import sys +from typing import Annotated from uuid import uuid4 from fastapi import Depends from sqlalchemy import URL from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine -from typing_extensions import Annotated from backend.app.common.log import log from backend.app.core.conf import settings diff --git a/backend/app/models/base.py b/backend/app/models/base.py index 0a7f1f4c..500b1300 100644 --- a/backend/app/models/base.py +++ b/backend/app/models/base.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- from datetime import datetime +from typing import Annotated from sqlalchemy.orm import DeclarativeBase, Mapped, MappedAsDataclass, declared_attr, mapped_column -from typing_extensions import Annotated from backend.app.utils.timezone import timezone diff --git a/backend/app/schemas/api.py b/backend/app/schemas/api.py index be1892c2..aaf3b08f 100644 --- a/backend/app/schemas/api.py +++ b/backend/app/schemas/api.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from datetime import datetime -from pydantic import ConfigDict, Field, field_validator +from pydantic import ConfigDict, Field from backend.app.common.enums import MethodType from backend.app.schemas.base import SchemaBase @@ -14,13 +14,6 @@ class ApiSchemaBase(SchemaBase): path: str = Field(..., description='api路径') remark: str | None = None - @field_validator('method') - @classmethod - def method_validator(cls, v): - if not v.isupper(): - raise ValueError('请求方式必须大写') - return v - class CreateApiParam(ApiSchemaBase): pass diff --git a/backend/app/schemas/base.py b/backend/app/schemas/base.py index 6c92649d..00b54425 100644 --- a/backend/app/schemas/base.py +++ b/backend/app/schemas/base.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -from pydantic import BaseModel, ConfigDict + +from pydantic import BaseModel, ConfigDict, EmailStr, validate_email from pydantic_extra_types.phone_numbers import PhoneNumber # 自定义验证错误信息不包含验证预期内容(也就是输入内容),受支持的预期内容字段参考以下链接 @@ -142,5 +143,11 @@ class CustomPhoneNumber(PhoneNumber): default_region_code = 'CN' +class CustomEmailStr(EmailStr): + @classmethod + def _validate(cls, __input_value: str) -> str: + return None if __input_value == '' else validate_email(__input_value)[1] + + class SchemaBase(BaseModel): model_config = ConfigDict(use_enum_values=True) diff --git a/backend/app/schemas/casbin_rule.py b/backend/app/schemas/casbin_rule.py index c41488a8..698d92ff 100644 --- a/backend/app/schemas/casbin_rule.py +++ b/backend/app/schemas/casbin_rule.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -from pydantic import ConfigDict, Field, field_validator +from pydantic import ConfigDict, Field from backend.app.common.enums import MethodType from backend.app.schemas.base import SchemaBase @@ -11,13 +11,6 @@ class CreatePolicyParam(SchemaBase): path: str = Field(..., description='api 路径') method: MethodType = Field(default=MethodType.GET, description='请求方法') - @field_validator('method') - @classmethod - def method_validator(cls, v): - if not v.isupper(): - raise ValueError('请求方式必须大写') - return v - class UpdatePolicyParam(CreatePolicyParam): pass diff --git a/backend/app/schemas/dept.py b/backend/app/schemas/dept.py index 7bd6add9..c99b5a70 100644 --- a/backend/app/schemas/dept.py +++ b/backend/app/schemas/dept.py @@ -2,10 +2,10 @@ # -*- coding: utf-8 -*- from datetime import datetime -from pydantic import ConfigDict, EmailStr, Field +from pydantic import ConfigDict, Field from backend.app.common.enums import StatusType -from backend.app.schemas.base import CustomPhoneNumber, SchemaBase +from backend.app.schemas.base import CustomEmailStr, CustomPhoneNumber, SchemaBase class DeptSchemaBase(SchemaBase): @@ -14,7 +14,7 @@ class DeptSchemaBase(SchemaBase): sort: int = Field(default=0, ge=0, description='排序') leader: str | None = None phone: CustomPhoneNumber | None = None - email: EmailStr | None = None + email: CustomEmailStr | None = None status: StatusType = Field(default=StatusType.enable)