前言
-
该教程适合非Web专业有Web后台开发需求的专业同学学习【例:物联网工程、电子信息工程】
-
学习该教程需要有一定的python语言基础,清楚知道python的基础语法与基础的数据类型与引用数据类型
-
学习该教程需要对装饰器有一定的了解
-
FastAPI 是一个非常易学,且开发快速的高性能Web框架,程序的健壮性有待考究,可以满足基本的Web后端开发需求
-
FastAPI 主要做Web后端的接口开发,可以通过简洁的代码达到高效快速的开发
-
如果你具备以上的学习条件同时对FastAPI有了一定的初步了解就开始你的学习之旅吧
2020年10月24日 ,疑问漏洞联系QQ:992247234
事前工作
- pip 换源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
- 安装虚拟环境
pip install virtualenv
pip install virtualenvwrapper # linux
pip install virtualenvwrapper-win #Windows使用该命令
- 修改虚拟环境的路径
新建添加一个系统环境变量
-新建一个虚拟环境
mkvirtualenv 虚拟环境名称
- 检查虚拟环境
#输入
workon #查看当前虚拟环境
- 切换虚拟环境
workon 虚拟环境名
FastAPI
FastAPI 是python的一个用于构建 API 的现代、快速(高性能)的 异步 web 框架
关键特性:
- 快速:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
- 高效编码:提高功能开发速度约 200% 至 300%。*
- 更少 bug:减少约 40% 的人为(开发者)导致错误。*
- 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
- 简单:设计的易于使用和学习,阅读文档的时间更短。
- 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
- 健壮:生产可用级别的代码。还有自动生成的交互式文档。
- 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。
文档: https://fastapi.tiangolo.com
源码: https://github.com/tiangolo/fastapi
依赖安装
- 环境python3.6以上版本
- 安装fastapi
pip install fastapi
pip install uvicorn
示例
- 创建一个
main.py
文件并写入以下内容:
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {
"message":"hello FastAPI"
}
- 启动服务器
uvicorn main:app --reload
使用浏览器访问 http://127.0.0.1:8000/
你将会看到如下 JSON 响应:
{"message":"hello FastAPI"}
- 恭喜你你已经成功通过FastAPI写出了你的第一个FastAPI接口程序。
传递参数
请下载安装调试工具postMan
链接:https://pan.baidu.com/s/1xWX2SJpe7U0mTRlMzvk9ow
提取码:67yy
复制这段内容后打开百度网盘手机App,操作更方便哦
路径参数
-
path参数的值
item_id
将作为参数传递给您的函数item_id
。 -
在上一个Main.py中添加如下代码
@app.get("/item/{item_id}")
async def readItem(item_id):
print(item_id)
return {"item_id":item_id}
-
启动服务器,通过浏览器或者postman访问对应的接口
http://127.0.0.1:8000/item/{参数}
- 例:
http://127.0.0.1:8000/item/123456
-
后台结果:
简单练习
-
实现加法
# 编写对应的接口实现加法运算 @app.get("/add/{num1}/{num2}") async def add(num1:int,num2:int): sum = num1 + num2 return sum
查询参数
-
声明不属于路径参数的其他功能参数时,它们将自动解释为“查询”参数。
例:@app.get("/goods/") async def goodsMessage(goodsid:int,Price:int): print("商品id:%s"%goodsid) print("商品价格:%s"%Price) return {"商品id":goodsid,"商品价格":Price}
Post请求与请求正文
当您需要将数据从客户端(例如,浏览器)发送到API时,可以将其作为请求正文发送。
一个请求体是由客户端发送到您的API数据。一个响应的身体是你的API发送到客户端的数据。
您的API几乎总是必须发送响应正文。但是客户不一定需要始终发送请求正文。
- 首先,你需要导入
BaseModel
来自pydantic
:
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: Optional[str] = None # 非必填参数
price: float
tax: Optional[float] = None # 非必填参数
@app.post("/login/")
async def login(user: Item):
return user
小结
- FastAPI 轻量级,容易上手安装快速
- 很少的几行代码就可以实现接口的快速开发,没有web基础的同学也能很快上手
- 支持Resutful开发风格,利用装饰器,搭建接口迅速