一、概述
使用response_model定義
請求一個接口返回來我們客戶端可見的東西都是所謂的響應報文,如響應頭,響應碼,響應內容等。
通常不會那么傻的用戶輸入什么就返回什么。以下的官網示例純粹的演示看:
import uvicorn from fastapi import FastAPI from pydantic import BaseModel, EmailStr app = FastAPI() class UserIn(BaseModel): username: str password: str email: str full_name: str = None class UserOut(BaseModel): username: str email: str full_name: str = None @app.post("/user/", response_model=UserOut) async def create_user(*, user: UserIn): return user if __name__ == '__main__': uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True, debug=True)
json參數
{ "username":"xiao", "password":"1234", "email":"12345678@qq.com", "full_name":"肖" }
通常再定義我們的API返回響應的時候,一般是返回固定JSON格式的,所以可以直接使用定義response_model為一個字典:
import uvicorn from fastapi import FastAPI from typing import Dict app = FastAPI() @app.get("/keyword-weights/", response_model=Dict[str, float]) async def read_keyword_weights(): return {"foo": 2.3, "bar": 3.4} if __name__ == '__main__': uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True, debug=True)
json參數
{ "username":"xiao", "password":"1234", "email":"12345678@qq.com", "full_name":"肖" }
關於響應狀態碼status_code
通常的一個接口請求完成,如果沒有什么異常通常會返回200: 如日志打印出來一樣:
INFO: 127.0.0.1:58141 - "POST /user/ HTTP/1.1" 400 INFO: 127.0.0.1:58315 - "POST /user/ HTTP/1.1" 200
FastAPI運行我們的指定返回的status_code,如下示例:
import uvicorn from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class UserIn(BaseModel): username: str password: str email: str full_name: str = None class UserOut(BaseModel): username: str email: str full_name: str = None @app.post("/user/", response_model=UserOut,status_code=500) async def create_user(*, user: UserIn): return user if __name__ == '__main__': uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True, debug=True)
由於在路由中定死了狀態碼500,所以這里就是500
甚至還可以通過導入status來指定:
import uvicorn from fastapi import FastAPI, status app = FastAPI() @app.post("/items/", status_code=status.HTTP_201_CREATED) async def create_item(name: str): return {"name": name} if __name__ == '__main__': uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True, debug=True)
訪問
http://127.0.0.1:8000/items?name=xiao
可以看到狀態碼為201
本文參考鏈接: