我正在尝试写一个正则表达式来验证美国电话号码的格式(123)123-1234 - 真123-123-1234 - 是的
其他一切都无效.
我想出了类似的东西
^\(?([0-9]{3}\)?[-]([0-9]{3})[-]([0-9]{4})$
Run Code Online (Sandbox Code Playgroud)
但这证实了,123)-123-1234(123-123-1234
这是不对的.
我想要一个正则表达式代码,它只允许数字电话号码(例如1234567890)以及GB格式号码(例如123-456-7890).
该表达式必须适用于这两种情况.
目前我正在使用下面的正则表达式,只允许GB电话号码
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
Run Code Online (Sandbox Code Playgroud)
我还需要帮助才允许数字编号.
在 FastAPI 中传递字典列表,一般我们会定义一个 pydantic 模式,并会提到
param: List[schema_model]
Run Code Online (Sandbox Code Playgroud)
我面临的问题是我有文件要附加到我的请求中。我找不到在路由器功能中定义架构和文件上传的方法。为此,我将所有参数(请求正文)定义为正文参数,如下所示。
@router.post("/", response_model=DataModelOut)
async def create_policy_details(request:Request,
countryId: str = Body(...),
policyDetails: List[dict] = Body(...),
leaveTypeId: str = Body(...),
branchIds: List[str] = Body(...),
cityIds: List[str] = Body(...),
files: List[UploadFile] = File(None)
):
Run Code Online (Sandbox Code Playgroud)
当我使用 postman 的 form-data 选项发送请求时,它为 policyDetails 参数显示“0:value is not a valid dict”。我正在发送 [{"name":"name1","department":"d1"}]。它说不是有效的字典,即使我发送有效的字典。谁可以帮我这个事?DataModelOut 类
class DataModelOut(BaseModel):
message: str = ""
id: str = ""
input_data: dict = None
result: List[dict] = []
statusCode: int
Run Code Online (Sandbox Code Playgroud) 我有一个连接到 MongoDB 的多语言 FastAPI。我在 MongoDB 中的文档以两种可用语言复制,并以这种方式构建(简化示例):
\n\n{\n "_id": xxxxxxx,\n "en": { \n "title": "Drinking Water Composition",\n "description": "Drinking water composition expressed in... with pesticides.",\n "category": "Water", \n "tags": ["water","pesticides"] \n },\n "fr": { \n "title": "Composition de l\'eau de boisson",\n "description": "Composition de l\'eau de boisson exprim\xc3\xa9e en... pr\xc3\xa9sence de pesticides....",\n "category": "Eau", \n "tags": ["eau","pesticides"] \n }, \n}\n\nRun Code Online (Sandbox Code Playgroud)\n因此,我实现了两个模型DatasetFR和,每个模型都对每种语言中的特定外部模型 ( )DatasetEN进行引用。Enumcategorytags
class DatasetFR(BaseModel):\n title:str\n description: str\n category: CategoryFR\n tags: …Run Code Online (Sandbox Code Playgroud) 是否可以调用所有验证器来获取完整的错误列表?
@validator('password', always=True)
def validate_password1(cls, value):
password = value.get_secret_value()
min_length = 8
if len(password) < min_length:
raise ValueError('Password must be at least 8 characters long.')
return value
@validator('password', always=True)
def validate_password2(cls, value):
password = value.get_secret_value()
if not any(character.islower() for character in password):
raise ValueError('Password should contain at least one lowercase character.')
return value
Run Code Online (Sandbox Code Playgroud)
当前的行为似乎一次调用一个验证器。
我的 Pydantic 课程:
class User(BaseModel):
email: EmailStr
password: SecretStr
Run Code Online (Sandbox Code Playgroud)
如果我没有在请求中包含email, 或password, 字段,那么我会在数组中得到两个验证失败,这就是我想要对该字段执行的操作password,但当前的行为似乎调用了一个,如果失败则抛出立即出现错误。
所以我有以下代码行:
item: Optional[int] = Field(None, ge=1, le=168)
Run Code Online (Sandbox Code Playgroud)
我也希望有可能设定-1价值。因此,我需要排除零值,但我想允许一个值和来自to-1的值。1168
有什么办法可以做到这一点吗?
我的GET端点收到一个需要满足以下条件的查询参数:
int0 和 10 之间1.直接使用Query(gt=0, lt=10). 但是,我不清楚如何扩展Query以进行额外的自定义验证,例如2.. 该文档最终导致了 pydantic。但是,当第二次验证失败时,我的应用程序遇到内部服务器错误2.。
下面是一个最小范围的示例
from fastapi import FastAPI, Depends, Query
from pydantic import BaseModel, ValidationError, validator
app = FastAPI()
class CommonParams(BaseModel):
n: int = Query(default=..., gt=0, lt=10)
@validator('n')
def validate(cls, v):
if v%2 != 0:
raise ValueError("Number is not even :( ")
return v
@app.get("/")
async def root(common: CommonParams = Depends()):
return {"n": common.n}
Run Code Online (Sandbox Code Playgroud)
以下是按预期工作的请求和失败的请求:
# requsts that work …Run Code Online (Sandbox Code Playgroud) 我试图有一个像这样的端点/services?status=New
status将是 New或者Old
这是我的代码:
from fastapi import APIRouter, Depends
from pydantic import BaseModel
from enum import Enum
router = APIRouter()
class ServiceStatusEnum(str, Enum):
new = "New"
old = "Old"
class ServiceStatusQueryParam(BaseModel):
status: ServiceStatusEnum
@router.get("/services")
def get_services(
status: ServiceStatusQueryParam = Query(..., title="Services", description="my desc"),
):
pass #my code for handling this route.....
Run Code Online (Sandbox Code Playgroud)
结果是我收到一个似乎与此问题相关的错误
错误说AssertionError: Param: status can only be a request body, using Body()
然后我找到了这里解释的另一个解决方案。
所以,我的代码将是这样的:
from fastapi import APIRouter, Depends
from pydantic …Run Code Online (Sandbox Code Playgroud) fastapi ×6
python ×6
pydantic ×5
regex ×2
cakephp ×1
dictionary ×1
exception ×1
javascript ×1
list ×1
mongodb ×1
openapi ×1
python-3.x ×1
range ×1
validation ×1
valueerror ×1