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一样简单: 首先用你喜欢的语 ...
随机推荐
- java集成网站微信,微博,qq登录
微信 WechatConfig.java package com.meeno.chemical.common.sdk.wechat.config; import org.springframework ...
- js 遍历数组对象求和
这个通常是求多个商品的总价遇到的情形: [ 0: {id: 1, name: "服务费", price: "1.00"} 1: {id: 2, name: &q ...
- ffmpeg细节整理记录
ffmpeg细节整理记录 1.-vcodec.-code:v.-c:v ffmpeg的官方文档 -vcodec 是 -code:v 别名. -vcodec codec (output) Set the ...
- Jemeter压力测试
Jmeter教程 简单的压力测试 Jmeter是一个非常好用的压力测试工具. Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好. 转载自小坦克:https: ...
- Flink提交流程和架构
一.Flink提交任务的流程 Flink任务提交后,Client向HDFS上传Flink的jar包和配置,之后向Yarn ResourceManager提交任务,ResourceManager分配Co ...
- 多线程-synchorized
synchorized锁升级过程: synchorized锁升级过程中只能升级不能降级,起初是JDK早期(1.5之前),是重量级锁,是找操作系统申请OS锁.所谓重量级锁是说获取锁和释放锁都需要经过操作 ...
- Node.js开发博客系统
数据库设计 用户表: id phone password nickname head_img personal_sign level_id create_time update_time is_del ...
- roscore启动不完全问题
运行roscore,得到如下日志,且一直卡着无法继续执行 ... logging to /home/xbit/.ros/log/79f2952c-589c-11ea-8213-d0abd5e7d222 ...
- Docker容器管理——进入容器命令
一.docker exec 命令(这个命令的本质就是让docker exec替我在容器执行一条命令,当执行的命令是/bin/bash的时候就是执行一条登陆命令,则会进入容器内部) 1.让docker ...
- 《NAT穿越(NAT-T)RFC3947文档》记录