专栏首页python3FastAPI--响应报文(4)

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Flask Blueprint

    Blueprint它是Flask项目的一种组件式开发,可以在一个应用内或跨越 多个项目共用蓝图。使用蓝图可以极大地简化大型应用的开发难度,也为Flask扩展 提...

    py3study
  • python中Json与object转化

    python提供了json包来进行json处理,json与python中数据类型对应关系如下:

    py3study
  • 周末学习笔记——day03(模块,包)

    py3study
  • LeetCode 309. 最佳买卖股票时机含冷冻期(动态规划)

    设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

    Michael阿明
  • 宋宝华: 关于Linux编译优化几个必须掌握的姿势

    首先我们都知道,Linux内核如果用O0编译,是无法编译过的,Linux的内核编译,要么是O2,要么是Os,这点从Linux的Makefile里面可以看出:

    Linux阅码场
  • 股票问题-LeetCode #121、122、309、714、123、188(一解6杀,状态转移)

    dp初始化: dp[-1][k][0] = dp[i][0][0] = 0 dp[-1][k][1] = dp[i][0][1] = -infinity

    算法工程师之路
  • elasticesearch搜索返回高亮关键字

    highlight默认只支持单个属性高亮,使用require_field_match属性置为false则可以使所有属性高亮

    海向
  • 《Python入门09》揭秘python面向对象的编程~

    Python和C++、Java是一样的,它是一种面向对象的计算机语言。在前几章,主要介绍了Python内置的主要对象类型(数、字符串、列表、元组和字典),大致...

    ShuYini
  • 用Wolfram语言解决科学与日常生活中有趣的数学问题

    数学在日常生活中经常被认为是神秘和可怕的东西,至少很难理解。我们知道这根本不是真的。数学出现在科学的每个领域和我们生活的每一个时刻。自然界中的现象通常用相当复...

    WolframChina
  • 腾讯大规模Hadoop集群实践

    TDW(Tencent distributed Data Warehouse,腾讯分布式数据仓库)基于开源软件Hadoop和Hive进行构建,打破了传统数据仓库...

    CSDN技术头条

扫码关注云+社区

领取腾讯云代金券