我正在将 FastAPI 与 Pydantic 结合使用。
我的问题 - 我需要使用 Pydantic 引发 ValueError
from fastapi import FastAPI
from pydantic import BaseModel, validator
from fastapi import Depends, HTTPException
app = FastAPI()
class RankInput(BaseModel):
rank: int
@validator('rank')
def check_if_value_in_range(cls, v):
"""
check if input rank is within range
"""
if not 0 < v < 1000001:
raise ValueError("Rank Value Must be within range (0,1000000)")
#raise HTTPException(status_code=400, detail="Rank Value Error") - this works But I am looking for a solution using ValueError
return v
def …Run Code Online (Sandbox Code Playgroud) 所以我有以下代码行:
item: Optional[int] = Field(None, ge=1, le=168)
Run Code Online (Sandbox Code Playgroud)
我也希望有可能设定-1价值。因此,我需要排除零值,但我想允许一个值和来自to-1的值。1168
有什么办法可以做到这一点吗?
我想验证pydantic模型的三个模型字段。为此,我正在从 pydantic 导入 root_validator。低于错误。我在https://pydantic-docs.helpmanual.io/usage/validators/#root-validators 中找到了这个。任何人都可以帮助我。找出下面的错误。from pydantic import BaseModel, ValidationError, root_validator Traceback (最近一次调用): File "", line 1, in ImportError: cannot import name 'root_validator' from 'pydantic' (C:\Users\Lenovo\AppData\Local\Programs\ Python\Python38-32\lib\site-packages\pydantic__init__.py)
我试过
@validator
def validate_all(cls,v,values,**kwargs):
Run Code Online (Sandbox Code Playgroud)
我从一些常见的字段父模型继承了我的 pydantic 模型。仅显示父类字段的值,但不显示我的子类字段。例如
class Parent(BaseModel):
name: str
comments: str
class Customer(Parent):
address: str
phone: str
@validator
def validate_all(cls,v,values, **kwargs):
#here values showing only (name and comment) but not address and phone.
Run Code Online (Sandbox Code Playgroud) 我有以下 FastAPI 后端:
from fastapi import FastAPI
app = FastAPI
class Demo(BaseModel):
content: str = None
@app.post("/demo")
async def demoFunc(d:Demo):
return d.content
Run Code Online (Sandbox Code Playgroud)
问题是,当我向此 API 发送带有额外数据的请求时,例如:
data = {"content":"some text here"}aaaa
Run Code Online (Sandbox Code Playgroud)
或者
data = {"content":"some text here"aaaaaa}
resp = requests.post(url, json=data)
Run Code Online (Sandbox Code Playgroud)
422 unprocessable entity在以下情况下,它会抛出状态代码错误,返回字段中包含 Actual("some text here") 和 Extra("aaaaa") 数据data = {"content":"some text here"}aaaa:
{
"detail": [
{
"loc": [
"body",
47
],
"msg": "Extra data: line 4 column 2 (char 47)",
"type": "value_error.jsondecode",
"ctx": {
"msg": "Extra …Run Code Online (Sandbox Code Playgroud) 我正在为 Discord 制作一个 rick roll 网站,我想重定向到404响应状态代码的 rick roll 页面。
我尝试了以下方法,但没有成功:
@app.exception_handler(fastapi.HTTPException)
async def http_exception_handler(request, exc):
...
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) python ×6
fastapi ×5
pydantic ×5
exception ×1
json ×1
openapi ×1
python-3.x ×1
range ×1
starlette ×1
validation ×1