python FastAPI 初接触
先吹一波: 原来写接口可以这么简单!!! 简单到没朋友 。
中文官网:https://fastapi.tiangolo.com/zh/tutorial/header-params/
且天然支持异步处理。
自动生成API文档,
还说比肩NodeJs和Go 、这个我就没有具体测试了,有兴趣的可以自行尝试比较
直接上代码吧,一切的解释都是多余的。
Hello World !!
from fastapi import FastAPI,Form,Query,UploadFile,File,Request
from pydantic import BaseModel,Field
from typing import Optional,List
import os,sys
'''
虚拟环境切换: conda activate FastAPI
FastAPI 程序启动 :uvicorn manger:app --port 7777 --reload
''' app = FastAPI() @app.get('/')
async def root():
# get 请求
return {'message':'Hello World!'}
动态路径:
@app.get('/{test_id}')
async def api_get_text(test_id:int):
# get 请求 动态路径
return {'data':test_id}
post:
@app.post('/user')
async def api_post_text(data:dict):
#Post 请求,json格式
return {'data':data}
请求内容检测:
class detection(BaseModel):
name:str
age:int = 18 #默认值
sex:Optional[str] # null 类型 @app.post('/PostDetection')
async def api_post_text(data:detection):
#Post 请求内容检测
return {'data':data}
请求内容多个主体检测:
class Mds(BaseModel):
name: str
age: int = 18
home: str
height: Optional[str] class Mm(BaseModel):
title: str
phone: str = 'huawei' @app.put("/PutTest/")
async def PutTests(Mds:Mds,Mm:Mm,name:str,q: Optional[bool] = False):
ret = {} if q:
ret.update({"request_name":name})
if Mds.name:
ret.update({"Name":Mds.name})
if Mds.height:
ret.update({"height":Mds.height})
if Mm.title:
ret.update({"Title":Mm.title})
return ret
From表单:
@app.post('/userFrom/')
async def api_post_text(username: str = Form(...),password:str = Form(...)):
# Post 请求 ,From 表单格式
return {'username':username,"Password":password}
API内容代码直接体现:
class Posttest(BaseModel):
test_name:str
max_data:int = 10 class Config: # 手动定义接口返回值 示例内容
schema_extra = {
"example":{
"name":"YCC",
"data":{
"age":12,
'sex':'boy'
}
}
} @app.post("/postTest/")
async def test_posts(data:Posttest,name:str = Query(...,title="post test",example='phyger',max_length=5,alias='x-name',deprecated=True,description="test_description")):
'''
这部分可直接在 接口文档内展示
Query 字段查询检验
title 接口文档字段注释
min_length 最短
max_length 最长
alias 变量别名 用于接收不合法参数名称 (接口请求时传递x-name ,接收到时会将x-name 匹配为name,设定后 只会匹配x-name 不匹配name)
description 字段描述信息
example 示例参数
deprecated 接口废弃提示
'''
return {"name":name,"data":data}
多层嵌套检测:
class TowOptionalData(BaseModel):
townumber:int class OptionalData(BaseModel):
name:str = Field(...,example='ccc') # 检测字段内自定义限制
userlist:List[str] # 列表内容类型限制
data:Optional[TowOptionalData] @app.post('/OptionalTset/')
async def test_Optional(data:OptionalData):
'''
多层嵌套类型检测
'''
return {'masage':"多层嵌套!!","data":data}
单个文件上传:
@app.post('/File/')
async def File_upload(request:Request,files:UploadFile =File(...)):
'''
文件对象默认是个列表
files.filename 获取文件名称
files.content_type 获取文件类型
'''
path = R"F:\my_pro\file\py"
newfile = files
newpath = os.path.join(path,newfile.filename)
try:
res = await newfile.read()
# print(len(res)/1024)
with open(newpath, "wb") as f:
f.write(res)
rts = {
"filename":file.filename,
"filetype":file.content_type,
"size":"%.2f KB"%(len(res)/1024)
}
return {'code':0,'data':rts}
except Exception as e :
msg = e
return {"err_msg":e}
多文件上传:
@app.post('/FileList/')
async def File_upload(request:Request,filelist:List[UploadFile] =File(...)): #多文件上传
'''
文件对象默认是个列表
files.filename 获取文件名称
files.content_type 获取文件类型
'''
path = R"F:\my_pro\file\py"
oklist = []
errlist = []
for file in filelist:
try:
newpath = os.path.join(path,file.filename)
res = await file.read()
with open(newpath, "wb") as f:
f.write(res)
rts = {
"filename":file.filename,
"FileType":file.content_type,
"size":"%.2f KB"%(len(res)/1024)
}
oklist.append(rts)
except Exception as e:
errlist.append({'name':file.filename,'msg':e})
return {"code":200,"oklist":oklist,"errlist":errlist}
请求头获取:
@app.get('/')
async def root(user_agent: Optional[str] = Header(None),test:Optional[str] = Header(None)):
# get 请求
return {'message':'Hello World!','data':test}
返回值封装:
安排。。。
以后项目又多了一个选择。
附上API文档:

特别鸣谢:Python 测试和开发
python FastAPI 初接触的更多相关文章
- python之初接触
编程语言相关 1什么是编程语言 编程语言即语言,语言的本质就是沟通,因而编程语言与英语 .法语.日语等所有语言并无区别,只不过英语是人与人之间沟通的介质,而编程语言则是程序员与计算机沟通的介质. 程序 ...
- python 之 数据类型初接触
python 之 数据类型初接触 标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dicti ...
- 初接触BurpLoader工具
初接触burp工具 菜鸟一枚,现在在接触一段时间测试,我在测试功能性的时候,想着网站被黑案例那么多,我是不是也应该弄弄安全性测试了,所以就有了下边的第一次接触BurpLoader工具来测试手机的app ...
- 软工实践练习-Git初接触
第一次听到Git,有点不知所云,听了实践课老师的讲解,才明白了Git作为最先进的分布式版本控制系统的重要性. 至于Git的安装和使用仍旧是自己摸索着去完成了,当然在这过程中也是遇到了很多的问题. 接下 ...
- vi初接触
vi初接触 它有三种模式: 一 一般模式 二 编辑模式 三 命令行模式 介绍几种比较常用的吧 -- 退出:q 写入:w 强制:! (以上可叠加) 显示行号:set nu 取消:set nonu 跳转到 ...
- ExtJS初接触 —— 了解 Ext Core
ExtJS初接触 —— 了解 Ext Core Ext Core是一款和jQuery媲美的轻型JS库,基于MIT许可.对于Dom的操作,我个人还是比较喜欢用jQuery.当然如果项目中用的是ExtJS ...
- ExtJS初接触 - 在项目中使用ExtJS
ExtJS初接触 - 在项目中使用ExtJS 今天ExtJS官网发布了ExtJS最新正式版4.2.1.Ext JS 4.2.1 正式版 下载 ExtJS为开发者在开发富客户的B/S应用中提供丰富的UI ...
- Java之路——Java初接触
本文大纲 1.Java是什么 2.Java历史 3.Java技术范围 3.1 Java SE平台技术范围 3.2 Java EE技术范围 3.3 Java 体系技术范围 4.总结 1.Java是什么 ...
- Dapr微服务应用开发系列2:Hello World与SDK初接触
题记:上篇介绍了Dapr的环境配置,这次我们来动手尝试一下Dapr应用的开发 Hello World Dapr应用的Hello World其实和其他的Hello World一样简单: 首先用你喜欢的语 ...
随机推荐
- WinForm嵌入Web网页的解决方案
企业级信息化系统绝大部分采用BS架构实现,如门户网站.OA系统.电商网站等,通过浏览器输入Web网址即可访问,对于使用者来说非常便捷,对于开发维护者来说也非常方便,程序维护只需更新服务器即可,使用者无 ...
- noip35
T1 考场乱搞出锅了... 正解: 把原序列按k往左和往右看成两个序列,求个前缀和,找下一个更新的位置,直接暴跳. Code #include<cstdio> #include<cs ...
- Linux 记录学习
- DLL-使用DLL
动态链接库的使用 fangyukuan 2010.6.21 应用程序可以调用的DLL函数,在DLL中叫做导出函数,而在应用程序中叫做导入函数.应用程序中的导入函数与DLL文件中的导出函数进行链接有两种 ...
- .Net Core WebApi(三)--使用 IdentityServer4 4.1.1 踩坑记录
目的:创建IdentityServer 并通过PostMan验证获取token 第一次配置如下 public class Config { public static IEnumerable<A ...
- WPF 中的 Command 命令
<Window x:Class="CommandDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx ...
- [SWMM]汇水区特征宽度的计算方法
SWMM模型产流计算中,有一个比较重要的参数就是子汇水区的特征宽度(width),这个参数对地表汇流时间和峰值有一定的影响.子汇水区特征宽度的计算方法有很多,这里介绍比较常用的两种: (1)采用面积除 ...
- Javascript - Vue - 在vscode里使用webpack
cnpm(node package manager)和webpack模块 npm是运行在node.js环境下的包管理工具,使用npm可以很快速的安装前端文件里需要依赖的那些项目文件,比如js.css文 ...
- c++中的一些会用到的函数
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 int main() { 5 string s ...
- ScheduledExecutorService中scheduleAtFixedRate方法与scheduleWithFixedDelay方法的区别
ScheduledExecutorService中scheduleAtFixedRate方法与scheduleWithFixedDelay方法的区别 ScheduledThreadPoolExecut ...