python fastapi 入门教程,每个案例都使用postman进行测试写的接口

这篇具有很好参考价值的文章主要介绍了python fastapi 入门教程,每个案例都使用postman进行测试写的接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、安装和基本运行访问

python fastapi 入门教程,每个案例都使用postman进行测试写的接口
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
官方示例代码

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

运行命令:uvicorn test:app --reload
注意:运行命令app前面那个是文件位置,官方的文件名叫main,要以实际的文件名为准,不然找不到app
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

python fastapi 入门教程,每个案例都使用postman进行测试写的接口
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

二、post请求和json参数嵌套

1、post请求 写法一:一层参数

class Hero(BaseModel):
    q:str
    w:str
    e:str
    # 可以为不传这个自动也可以传字符串,不传这个字段时该字段默认值为None
    r:Union[str, None] = None

@app.post('/ya_suo')
def ya_suo(hero:Hero):
    print(hero.r)
    #取值
    if hero.r==None:
        return '大招都没有'
    return hero

测试无r参数情况
python fastapi 入门教程,每个案例都使用postman进行测试写的接口测试有r参数情况
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

2、post请求 写法二:参数嵌套

2.1、错误写法

@app.post('/ti_mo')
def ti_mo(q:str,w:str,e:str,r:Union[str, None] = None):
    a={"q技能":q,"w技能":w,"e技能":e,"r技能":r}
    return a

报错了
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

2.2、正确写法

这样才行q:str,这种只用于路径参数,因为r可以为空或者不写,可以不用是路径参数
@app.post('/ti_mo1/{cd}')
def ti_mo1(cd:str,r:Union[str, None] = None):
    a={"技能cd":str(cd)+'s',"r技能":r}
    return a
@app.post('/ti_mo1/{cd}')
def ti_mo1(cd:str,r:Union[str, None] = None):
    a={"技能cd":str(cd)+'s',"r技能":r}
    return a

python fastapi 入门教程,每个案例都使用postman进行测试写的接口

2.3、嵌套多个请求参数(不明白的话看下面的postman的请求参数就懂了)

#这2个就直接用官方写的了
class Item(BaseModel):
    name: str
    description: Union[str, None] = None
    price: float
    tax: Union[float, None] = None
class User(BaseModel):
    username: str
    full_name: Union[str, None] = None

@app.post('/q_t/{id}')
def q_t(id:int,item:Item,user:User):
    return {'id':id,'item':item,'user':user}

python fastapi 入门教程,每个案例都使用postman进行测试写的接口

2.4、嵌套单个请求参数(细节max)(不明白的话看下面的postman的请求参数就懂了~)

#只有嵌套单个请求体的话请求参数和多个是有很大区别的
@app.post('/q_t1/{id}')
def q_t1(id:int,user:User):
    return {'id':id,'user':user}

注意:重点在发起请求的时候
希望请求参数格式

{
    "user": {
        "username": "dave",
        "full_name": "Dave Grohl"
    }
}

可是现在会报错
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
要这样才会成功,可是这不是我们想要的结果
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
按照官方的解决办法,在我这有点问题
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
告诉我确实一个参数(可能版本有啥问题把)
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
缺少我就先补上这个参数试试,发现就能正常使用了

@app.post('/q_t1/{id}')
def q_t1(id:int,user:User= Body(...,embed=True)):
    return {'id':id,'user':user}

最终测试
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

三、请求体 - 字段Field

#字段Field
class Item(BaseModel):
    name: str
    description: Union[str, None] = Field(
        default='默认值', title="这是一个商品", max_length=300
    )
    price: float = Field(gt=0, description="商品价格必须大于0")
    tax: Union[float, None] = None


@app.post("/items/{item_id}")
def update_item(item_id: int, item: Item = Body(...,embed=True)):
    results = {"item_id": item_id, "item": item}
    return results

gt=0的意思,看源码字段的解释
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
测试商品价格小于等于0的情况
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
测试正常情况
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

四、请求参数字段使用字典列表集合嵌套

#请求参数字段使用字典列表集合嵌套
class Image(BaseModel):
    #检查是否为有效的url
    url: HttpUrl
    name: str

class Item(BaseModel):
    name: str
    # 参数格式:字符串或者为空不传这个字段
    description: Union[str, None] = None
    price: float
    # 参数格式:小数或者为空不传这个字段
    tax: Union[float, None] = None
    tags: Set[str] = set()
    #参数格式:列表里面包含字典或者为空不传这个字段
    images: Union[List[Image], None] = None

@app.post('/qtt/{id}')
def qtt(id:int,item:Item):
    return {"id": id, "item": item}

字段设置说明
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
测试结果和请求参数:使用 tags: Set[str] = set(),我重复的写了一个"metal",,被去重了,列表嵌套字典
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

五、返回结果限制返回字段

#创建一个有明文密码的输入模型和一个没有明文密码的输出模型,让密码不返回
class UserRequest(BaseModel):
    username: str
    password: str


class UserResponse(BaseModel):
    username: str


#response_model=UserResponse  设置返回模型的字段,返回结果会过滤掉未在输出模型中声明的字段数据
@app.post("/user", response_model=UserResponse)
def create_user(user: UserRequest):
    #只会返回username信息
    return user

返回模型的字段不能出现请求模型字段没有的字段
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
测试,没有返回密码字段
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

六、异常信息处理

#基本使用异常信息
e=[1,2,4,5,6,9]
@app.get('/err/{id}')
def err(id:int):
    if id not in e:
        raise HTTPException(status_code=404,detail='id不存在')
    return {'id':id}

输入id为3,不存在的结果
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
输入id为1,存在的结果
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

七、接口文档

http://127.0.0.1:8000/docs
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

八、全局依赖设置全局token,name在header里面校验,获取header的信息作为变量使用

from fastapi import Depends, FastAPI, Header, HTTPException

#token: str = Header(...) header信息使用
def verify_token(token: str = Header(...)):
    if token != "em123dca":
        raise HTTPException(status_code=400, detail="Token 无效")
#方法名字没啥要求
def name(name: str = Header(...)):
    if name != "lcf":
        raise HTTPException(status_code=400, detail="该用户没有权限访问")

#全局依赖
app = FastAPI(dependencies=[Depends(verify_token), Depends(name)])


@app.get("/header_token")
#可以这样获取header的信息(做一些token信息解析),应该有其他方法的,没找到,谁找到告诉我一下
def get_token(name: str = Header(...),token: str = Header(...)):
    return {'name':name,'token':token}

测试:正确的token和有权限的name
python fastapi 入门教程,每个案例都使用postman进行测试写的接口测试:正确的token和无权限的name
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
测试:错误的token和有权限的name
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
都错误的话先校验token的,因为方法写在前面
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

九、启动服务器的第二种方式,让同局域网下用户可以访问

查询下自己的局域网ip地址

python查询ip地址
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

cmd查询ip地址
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
python fastapi 入门教程,每个案例都使用postman进行测试写的接口

from fastapi import FastAPI

app = FastAPI()
@app.get("/")
def s():
    return '局域网测试12'

if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app='test2:app',host='192.168.11.177',port=8001, reload=True)

python fastapi 入门教程,每个案例都使用postman进行测试写的接口

测试
python fastapi 入门教程,每个案例都使用postman进行测试写的接口
优化下启动代码文章来源地址https://www.toymoban.com/news/detail-404514.html

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
@time    : 2022/6/21 
@Author  : LL
@File    : test2.py
'''
from fastapi import FastAPI
def get_ip():
    import socket
    res = socket.gethostbyname(socket.gethostname())
    return res

app = FastAPI()
@app.get("/")
def s():
    return '局域网测试12'

if __name__ == '__main__':
    import uvicorn
    #app='test2:app'  文件位置:app
    uvicorn.run(app='test2:app',host=get_ip(),port=8001, reload=True)

到了这里,关于python fastapi 入门教程,每个案例都使用postman进行测试写的接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 树莓派系统入门教程(三)—— 使用Windows上的VSCode远程连接树莓派进行Python开发

    很多开发者更喜欢在大屏幕和强大的开发环境中编写代码,但同时他们希望能在树莓派这样的微型计算机上执行和测试代码。VSCode提供了一个强大的远程开发工具,可以让你在Windows主机上编写代码,同时在树莓派上执行。下面将为你详细介绍如何实现: 1. 安装VSCode和SSH扩展

    2024年02月12日
    浏览(35)
  • WPF真入门教程26--项目案例--欧姆龙PLC通讯工具

    前面已经完成了25篇的文章介绍,概括起来就是从0开始,一步步熟悉了wpf的概念,UI布局控件,资源样式文件的使用,MVVM模式介绍,命令Command等内容,这节来完成一个实际的项目开发,虽然小案例,但是可以把前面的知识融合起来,比如控件的布局,命令的绑定,视图模型的

    2024年02月02日
    浏览(35)
  • WPF真入门教程28--项目案例--MQTT服务器和客户端

    这个案例还是布局加视图模型,样式应用,业务逻辑,该项目是一个mqtt服务器和客户端的通信工具,这里不去分析mqtt的通信原理,关注在于wpf技能的应用,能够掌握这个例子,离项目开发也差不多了,只是没有跟db打交道,本项目重点在于理解mvvm模式,开发环境依然是vs20

    2024年01月17日
    浏览(42)
  • 很合适新手入门使用的Python游戏开发包pygame实例教程-01[开发环境配置与第一个界面]

    我们假定你已经安装好了我们开发python程序的sublime text,如果不知道怎么安装的可以参照我前面的博文。这里只需要解决的是配置好Pygame的问题。本篇博文主要解决开发环境配置以及第一个游戏界面的显示问题。 文章原出处: https://blog.csdn.net/haigear/article/details/130173836 没有

    2024年01月25日
    浏览(79)
  • “音游制作实用插件-Koreographer入门教程”,“Unity2D 音游案例-节奏大师(基于Koreographer)”

    源码(Github) 第一个是免费视频 音游制作实用插件-Koreographer入门教程) 第二个是siki学院的收费视频 Unity2D 音游案例-节奏大师(基于Koreographer) 视频演示了,球的弹跳,方块的缩放,特效的显示 音游制作实用插件-Koreographer入门教程 ogg,mp3改下后缀成ogg 文件,紫图标 文件

    2024年02月13日
    浏览(40)
  • 【 Python 入门教程 ② 】Python IDLE 下载教程

    本章节我们将向大家介绍如何下载 Python 官方编辑器 —— IDLE。 Python 可应用于多平台包括 Windows、Linux 和 Mac OS X。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。) Win 9x/NT/2000 Macintosh (Intel, PPC, 68K) OS/2 DOS (多个DOS版本) PalmOS Nokia 移动手机 Windows CE Acorn/RISC OS BeOS Amiga VMS/OpenVM

    2023年04月18日
    浏览(35)
  • python爬虫入门教程(非常详细):如何快速入门Python爬虫?

    示例示例Python爬虫入门教程什么是爬虫爬虫(又称网络爬虫)是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。它可以自动地抓取网页内容,并从中提取有用的数据,存储到本地文件或数据库中。 Python爬虫入门教程 1. 什么是爬虫爬虫(又称网络爬虫)是一种

    2024年02月10日
    浏览(37)
  • 【Spring教程30】Spring框架实战:从零开始学习SpringMVC 之 Rest风格简介与RESTful入门案例

    欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《SpringMVC 之 服务器响应》 REST(Representational State Transfer),表现形式状态转

    2024年02月04日
    浏览(36)
  • Python 入门教程

    Python 是一门优雅、简洁、易读易写的编程语言。它被广泛地应用于科学计算、 Web 开发、自动化运维等领域,并且拥有强大的社区支持和生态系统。 在开始学习 Python 前,需要先安装 Python。可以前往 Python 的官方网站 https://www.python.org/downloads/ 下载并安装最新版本的 Python。

    2024年02月08日
    浏览(38)
  • Python入门教程 | Python 基础语法

    第一个字符必须是字母表中字母或下划线 _ 。 标识符的其他的部分由字母、数字和下划线组成。 标识符对大小写敏感。 在 Python 3中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 在Python中

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包