fastapi有查询约束异常吗?
Is there any Query constraint exception on fastapi?
我使用的是 fastapi 0.70.0,python 3.8.10。
我期待查询在查询时引发 RequestValidationError(或其他)/items/0(因为 0 不是 gte=1)
我拿了fastapi示例代码,添加了Query参数约束(item 0是不允许的):
from fastapi import FastAPI, HTTPException, Query
from fastapi.exceptions import RequestValidationError
from fastapi.responses import PlainTextResponse
app = FastAPI()
@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request, exc):
return PlainTextResponse(str(exc), status_code=400)
@app.get("/items/{item_id}")
async def read_item(item_id: int = Query(default=1, gte=1)): # /!\ Important line.
if item_id == 3:
raise HTTPException(status_code=418, detail="Nope! I don't like 3.")
return {"item_id": item_id}
很少查询:
项目 1:有效查询:
curl http://127.0.0.1:8000/items/1 # Return item_id as expected.
{"item_id": 1}
a项:异常,“a”不是整数:
curl http://127.0.0.1:8000/items/a # RequestValidationError as expected
项目 0:未引发异常,0 不允许。
curl http://127.0.0.1:8000/items/0 # ô_O, no exception, 0 is not gte=1
{"item_id": 0}
那么,如果没有引发异常,查询约束还不可用吗?
没有gte
这样的键。您需要使用:
gt
- 大于,或
ge
- 大于等于
@app.get("/items/{item_id}")
async def read_item(item_id: int = Query(default=1, ge=1)): # /!\ Important line.
if item_id == 3:
raise HTTPException(status_code=418, detail="Nope! I don't like 3.")
return {"item_id": item_id}
参数定义为ge: Optional[float] = None,
,不是gte
:
from fastapi import FastAPI, Query
app = FastAPI()
@app.get('/')
async def get_magic(a: int = Query(default=1, ge=1)):
return {'foo': a}
if __name__ == '__main__':
import uvicorn
uvicorn.run('foo:app', port=4008, reload=True)
用 ?a=0
调用它给出了预期的错误:
{"detail":[{"loc":["query","a"],"msg":"ensure this value is greater than or equal to 1","type":"value_error.number.not_ge","ctx":{"limit_value":1}}]}
我使用的是 fastapi 0.70.0,python 3.8.10。
我期待查询在查询时引发 RequestValidationError(或其他)/items/0(因为 0 不是 gte=1)
我拿了fastapi示例代码,添加了Query参数约束(item 0是不允许的):
from fastapi import FastAPI, HTTPException, Query
from fastapi.exceptions import RequestValidationError
from fastapi.responses import PlainTextResponse
app = FastAPI()
@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request, exc):
return PlainTextResponse(str(exc), status_code=400)
@app.get("/items/{item_id}")
async def read_item(item_id: int = Query(default=1, gte=1)): # /!\ Important line.
if item_id == 3:
raise HTTPException(status_code=418, detail="Nope! I don't like 3.")
return {"item_id": item_id}
很少查询:
项目 1:有效查询:
curl http://127.0.0.1:8000/items/1 # Return item_id as expected.
{"item_id": 1}
a项:异常,“a”不是整数:
curl http://127.0.0.1:8000/items/a # RequestValidationError as expected
项目 0:未引发异常,0 不允许。
curl http://127.0.0.1:8000/items/0 # ô_O, no exception, 0 is not gte=1
{"item_id": 0}
那么,如果没有引发异常,查询约束还不可用吗?
没有gte
这样的键。您需要使用:
gt
- 大于,或ge
- 大于等于
@app.get("/items/{item_id}")
async def read_item(item_id: int = Query(default=1, ge=1)): # /!\ Important line.
if item_id == 3:
raise HTTPException(status_code=418, detail="Nope! I don't like 3.")
return {"item_id": item_id}
参数定义为ge: Optional[float] = None,
,不是gte
:
from fastapi import FastAPI, Query
app = FastAPI()
@app.get('/')
async def get_magic(a: int = Query(default=1, ge=1)):
return {'foo': a}
if __name__ == '__main__':
import uvicorn
uvicorn.run('foo:app', port=4008, reload=True)
用 ?a=0
调用它给出了预期的错误:
{"detail":[{"loc":["query","a"],"msg":"ensure this value is greater than or equal to 1","type":"value_error.number.not_ge","ctx":{"limit_value":1}}]}