国内做彩票网站违法么,有做学历在网站能查的到的,ssl 加密网站,自己做网站花钱吗文章目录 1、路径操作1.路径操作装饰器1.tags 标签2.summary 接口描述的总结信息3.describe: 接口信息的详细描述4.response_description#xff1a;响应描述5.deprecated#xff1a;接口是否废弃#xff0c;默认是False 2.fastapi路由分发include_router 2、请求与响应2.1、… 文章目录 1、路径操作1.路径操作装饰器1.tags 标签2.summary 接口描述的总结信息3.describe: 接口信息的详细描述4.response_description响应描述5.deprecated接口是否废弃默认是False 2.fastapi路由分发include_router 2、请求与响应2.1、路径参数1基本用法2有类型的路径参数3注意顺序 2.2、查询参数请求参数 1、路径操作
1.路径操作装饰器
fastapi支持各种请求方式 app.get() app.post() app.put() app.patch() app.delete() app.options() app.head() app.trace()
import uvicornfrom fastapi import FastAPIapp FastAPI()app.get(/get)
def get_test():return {method: get方法}app.post(/post)
def post_test():return {method: post方法}app.put(/put)
def put_test():return {method: put方法}app.delete(/delete)
def delete_test():return {method: delete方法}if __name__ __main__:#注意run的第一个参数 必须是文件名:应用程序名uvicorn.run(路径操作:app, port8080, reloadTrue)使用postman测试
当然也可以通过fastapi提供的docs文档测试 关于路径操作装饰器参数
1.tags 标签
这个是展示在每个接口上面的信息 app.post(“/items”,tags[‘这是items的测试接口’]) def items(): return {“method”: “items数据”}
2.summary 接口描述的总结信息
app.post(“/items”,tags[‘这是items的测试接口’], summary“this is items测试 summary”, )def items(): return {“method”: “items数据”} 3.describe: 接口信息的详细描述
app.post(“/items”,tags[‘这是items的测试接口’], summary“this is items测试 summary”, description“this is items测试 description…”, )def items(): return {“method”: “items数据”}
4.response_description响应描述
app.post(“/items”,tags[‘这是items的测试接口’], summary“this is items测试 summary”, description“this is items测试 description…”, response_description“this is items测试 response_description…”, deprecatedTrue 5.deprecated接口是否废弃默认是False
我们看下改为True的状态
app.post(“/items”,tags[‘这是items的测试接口’], summary“this is items测试 summary”, description“this is items测试 description…”, response_description“this is items测试 response_description…”, deprecatedTrue )def items(): return {“method”: “items数据”} 2.fastapi路由分发include_router
在FastAPI中我们可以使用include_router函数将一个或多个路由添加到应用程序中。 APIRouter 就给我们提供了在多个文件中注册路由的功能。
比如我们某个项目apps 里面不同功能代码放在不同的包app01app02等
每个功能都有自己的路由我们放在urls.py中 路由都是通过APIRouter()来注册的
from fastapi import APIRoutershop APIRouter()shop.get(/food)
def shop_food():return {shop: food}shop.get(/bed)
def shop_food():return {shop: bed}from fastapi import APIRouteruser APIRouter()user.post(/user/login)
def user_login():return {user: login}user.post(/user/reg)
def user_reg():return {user: reg}在与apps文件夹同级的main.py中我们来写总路由
from fastapi import FastAPI # FastAPI 是一个为你的 API 提供了所有功能的 Python 类。
import uvicornfrom apps.app01.urls import shop
from apps.app02.urls import user#创建应用程序app是应用程序名
app FastAPI() # 这个实例将是创建你所有 API 的主要交互对象。这个 app 同样在如下命令中被 uvicorn 所引用#在这里进行路由分发prefix是路由前缀不用在子路由里面写
app.include_router(shop, prefix/shop, tags[第一章节商城接口, ])
app.include_router(user, prefix/user, tags[第二章节用户中心接口, ])if __name__ __main__:#注意run的第一个参数 必须是文件名:应用程序名uvicorn.run(main:app, port8080, reloadTrue)我们看下docs文档
不同功能的路由分开了这样比较简明扼要 测试下也能拿到数据
2、请求与响应
2.1、路径参数
1基本用法
之前我们写的案例里面的请求路径参数都是写死的但是生产中我们经常需要动态的传参怎么实现呢 以使用与 Python 格式化字符串相同的语法来声明路径参数或变量
app.get(“/user/{user_id}”) def get_user(user_id): print(user_id, type(user_id)) return {“user_id”: user_id}
路径参数 user_id 的值将作为参数 user_id 传递给你的函数。
实战
from fastapi import FastAPI # FastAPI 是一个为你的 API 提供了所有功能的 Python 类。
import uvicorn#创建应用程序app是应用程序名
app FastAPI() # 这个实例将是创建你所有 API 的主要交互对象。这个 app 同样在如下命令中被 uvicorn 所引用#异步的请求参数函数加上async
app.get(/user/{user_id})
async def get_user(user_id):return {user_id: user_id}app.get(/article/{article_id})
async def get_article(article_id):return {article: article_id}if __name__ __main__:#注意run的第一个参数 必须是文件名:应用程序名uvicorn.run(路径参数:app, port8080, reloadTrue)get请求访问
2有类型的路径参数
你可以使用标准的 Python 类型标注为函数中的路径参数声明类型。 自python3.5开始PEP484为python引入了类型注解(type hints)typing的主要作用有
类型检查防止运行时出现参数、返回值类型不符。作为开发文档附加说明方便使用者调用时传入和返回参数类型。模块加入不会影响程序的运行不会报正式的错误pycharm支持typing检查错误时会出现黄色警告。 type hints 主要是要指示函数的输入和输出的数据类型数据类型在typing 包中基本类型有str list dict等等
Union 是当有多种可能的数据类型时使用当某个字段不止一个数据类型时比如函数有可能根据不同情况有时返回str或返回list那么就可以写成Union[list, str] Optional 是Union的一个简化 当 数据类型中有可能是None时比如有可能是str也有可能是None则Optional[str], 相当于Union[str, None] 使用UnionOptional需要导包 from typing import Union from typing import Optional
#路径函数中不属于路径参数的其它参数都属于查询参数 async def get_user(kd,xl:Union[str,None]None,gj:Optional[str]None): #将查询结果返回 return {“kd”: kd, “xl”:xl, “gj”:gj }
docs文档查看
app.get(“/user/{user_id}”) def get_user(user_id: int): print(user_id, type(user_id)) return {“user_id”: user_id}
在这个例子中user_id 被声明为 int 类型。
此时去请求得到的就是int类型的响应数据
但是此时要做了限制后url输入时要输入指定类型数据否则转换失败会报错
3注意顺序
在创建路径操作时你会发现有些情况下路径是固定的。
比如 /users/me我们假设它用来获取关于当前用户的数据.
然后你还可以使用路径 /user/{username} 来通过用户名 获取关于特定用户的数据。
由于路径操作是按顺序从上到下依次运行的你需要确保路径 /user/me 声明在路径 /user/{username}之前
app.get(“/user/me”) async def read_user_me(): return {“username”: “the current user”}
app.get(“/user/{username}”) async def read_user(username: str): return {“username”: username}
否则/user/{username}的路径还将与/user/me 相匹配认为自己正在接收一个值为 “me” 的 username 参数。
走的是上面/user/username的逻辑
所以一般把动态路径放下面
2.2、查询参数请求参数
路径函数中声明不属于路径参数的其他函数参数时它们将被自动解释为查询字符串参数就是 url? 之后用分割的 key-value 键值对。
from fastapi import FastAPI # FastAPI 是一个为你的 API 提供了所有功能的 Python 类。
import uvicorn#创建应用程序app是应用程序名
app FastAPI() # 这个实例将是创建你所有 API 的主要交互对象。这个 app 同样在如下命令中被 uvicorn 所引用#异步的请求参数函数加上async
app.get(/user)
#路径函数中不属于路径参数的其它参数都属于查询参数
async def get_user(kd,xl,gj):#将查询结果返回return {kd: kd,xl:xl,gj:gj}if __name__ __main__:#注意run的第一个参数 必须是文件名:应用程序名uvicorn.run(路径参数:app, port8080, reloadTrue)看下docs文档
测试发送请求 看下url里面就有了查询参数
也可以路径参数与查询参数共存 app.get(“/user/{kd}”) #路径参数与查询参数共存 #路径函数中不属于路径参数的其它参数都属于查询参数 async def get_user(kd,xl,gj): #将查询结果返回 return {“kd”: kd, “xl”:xl, “gj”:gj } 文档中查看kd成了路径参数其他两个是查询参数
发送请求我们看到kd位置不再是查询参数而是路径参数
上面的查询参数都是必填的有时我们需要有些事必填有些可以有默认值该怎么处理呢 我们可以在查询参数定义时给个默认值当用户不输入时可以默认是None或其他默认值 #异步的请求参数函数加上async app.get(“/user/”) #路径参数与查询参数共存 #路径函数中不属于路径参数的其它参数都属于查询参数 async def get_user(kd,xlNone,gjNone): #将查询结果返回 return {“kd”: kd, “xl”:xl, “gj”:gj } 请求当用户不输入时返回None