FastAPI--響應報文(4)


一、概述

使用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

 

 

本文參考鏈接:

http://www.zyiz.net/tech/detail-119883.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM