Skip to content

Commit 247792b

Browse files
perf: User name length
1 parent 9caf192 commit 247792b

File tree

2 files changed

+29
-18
lines changed

2 files changed

+29
-18
lines changed

backend/apps/system/crud/user.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from sqlmodel import Session, func, select, delete as sqlmodel_delete
44
from apps.system.models.system_model import UserWsModel, WorkspaceModel
55
from apps.system.schemas.auth import CacheName, CacheNamespace
6-
from apps.system.schemas.system_schema import BaseUserDTO, UserInfoDTO, UserWs
6+
from apps.system.schemas.system_schema import EMAIL_REGEX, PWD_REGEX, BaseUserDTO, UserInfoDTO, UserWs
77
from common.core.deps import SessionDep
88
from common.core.sqlbot_cache import cache, clear_cache
99
from common.utils.locale import I18n
@@ -78,18 +78,7 @@ def check_email_exists(*, session: Session, email: str) -> bool:
7878
return session.exec(select(func.count()).select_from(UserModel).where(UserModel.email == email)).one() > 0
7979

8080

81-
# 预编译正则表达式,提高效率
82-
EMAIL_REGEX = re.compile(
83-
r"^[a-zA-Z0-9]+([._-][a-zA-Z0-9]+)*@"
84-
r"([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+"
85-
r"[a-zA-Z]{2,}$"
86-
)
8781

88-
PWD_REGEX = re.compile(
89-
r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)"
90-
r"(?=.*[~!@#$%^&*()_+\-={}|:\"<>?`\[\];',./])"
91-
r"[A-Za-z\d~!@#$%^&*()_+\-={}|:\"<>?`\[\];',./]{8,20}$"
92-
)
9382
def check_email_format(email: str) -> bool:
9483
return bool(EMAIL_REGEX.fullmatch(email))
9584

backend/apps/system/schemas/system_schema.py

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
11
from typing import Optional
2-
from pydantic import BaseModel
2+
from pydantic import BaseModel, Field, field_validator
33

44
from common.core.schemas import BaseCreatorDTO
5+
import re
56

7+
EMAIL_REGEX = re.compile(
8+
r"^[a-zA-Z0-9]+([._-][a-zA-Z0-9]+)*@"
9+
r"([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+"
10+
r"[a-zA-Z]{2,}$"
11+
)
12+
PWD_REGEX = re.compile(
13+
r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)"
14+
r"(?=.*[~!@#$%^&*()_+\-={}|:\"<>?`\[\];',./])"
15+
r"[A-Za-z\d~!@#$%^&*()_+\-={}|:\"<>?`\[\];',./]{8,20}$"
16+
)
617
class model_status(BaseModel):
718
status: bool
819
ids: list[int]
@@ -13,11 +24,11 @@ class UserLanguage(BaseModel):
1324

1425

1526
class BaseUser(BaseModel):
16-
account: str
27+
account: str = Field(min_length=1, max_length=100, description="用户账号")
1728
oid: int
18-
29+
1930
class BaseUserDTO(BaseUser, BaseCreatorDTO):
20-
language: str
31+
language: str = Field(pattern=r"^(zh-CN|en)$", default="zh-CN", description="用户语言")
2132
password: str
2233
status: int = 1
2334
def to_dict(self):
@@ -26,12 +37,23 @@ def to_dict(self):
2637
"account": self.account,
2738
"oid": self.oid
2839
}
40+
@field_validator("language")
41+
def validate_language(cls, lang: str) -> str:
42+
if not re.fullmatch(r"^(zh-CN|en)$", lang):
43+
raise ValueError("Language must be 'zh-CN' or 'en'")
44+
return lang
2945

3046
class UserCreator(BaseUser):
31-
name: str
32-
email: str
47+
name: str = Field(min_length=1, max_length=100, description="用户名")
48+
email: str = Field(min_length=1, max_length=100, description="用户邮箱")
3349
status: int = 1
3450
oid_list: Optional[list[int]] = None
51+
52+
""" @field_validator("email")
53+
def validate_email(cls, lang: str) -> str:
54+
if not re.fullmatch(EMAIL_REGEX, lang):
55+
raise ValueError("Email format is invalid!")
56+
return lang """
3557

3658
class UserEditor(UserCreator, BaseCreatorDTO):
3759
pass

0 commit comments

Comments
 (0)