太好用了!别再苦苦用着Flask了,来带你看看它,你会爱上的( 二 )
使用pip或者pipenv即可安装 FastApi:
pip install fastapipipenv install fastapi安装完成以后 , 我们来完成第一个 API:
from fastapi import FastAPIapp = FastAPI()@app.get('/')def index():return {'message': '你已经正确创建 FastApi 服务!'}这里的写法跟 Flask 几乎一致 。 只不过在 Flask 中 , 我们定义路由的装饰器为@app.route('/') 。 而这里写为@app.get('/')
如下图所示:
文章插图
写好代码以后 , 我们需要使用uvicorn来运行 FastApi 。 首先使用pip或者pipenv安装uvicorn:
pip install uvicornpipenv install uvicorn然后执行命令:
uvicorn main:app --reload其中main表示我们的代码文件为main.py , app表示我们初始化的FastApi 对象的名字 。 --reload参数表示在修改了代码以后立即生效 , 不需要重启 。
运行命令以后 , 我们访问可以看到接口已经正确返回了 JSON 格式的数据:
文章插图
那么如何定义一个带参数的 GET 方法呢?我们再写一段代码:
@app.get('/query/{uid}')def query(uid):msg = f'你查询的 uid 为:{uid}'return {'success': True, 'msg': msg}写好代码以后 , 我们直接在浏览器里面访问新的地址 , 可以看到修改已经生效了 , 如下图所示:
文章插图
如果想限定uid 只能是数字 , 不能是字符串怎么办呢?你只需要多加4个字符:
@app.get('/query/{uid}')def query(uid: int):msg = f'你查询的 uid 为:{uid}'return {'success': True, 'msg': msg}对函数query的参数使用类型标注 , 标注为 int 类型 。 现在我们再来访问一下接口:
文章插图
当 query 后面的参数不是整数时 , 正常报错了 。
我们再来看一下本文一开始的 POST 方法 。 在使用 Flask 的时候 , 我们需要手动验证用户 POST 提交上来的数据是什么格式的 , 字段对不对 。
但使用 FastApi 的时候 , 我们只需要类型标注就能解决所有问题 。 首先我们导入from pydantic import BaseModel , 然后继承BaseModel实现我们允许 POST 方法提交上来的数据字段和格式:
from pydantic import BaseModelapp = FastAPI()class People(BaseModel):name: strage: intaddress: strsalary: floatPeople这个类通过类型标注 , 指定了它里面的4个字段和他们的类型 。 现在 , 我们来实现 POST 方法:
@app.post('/insert')def insert(people: People):age_after_10_years = people.age + 10msg = f'此人名字叫做:{people.name} , 十年后此人年龄:{age_after_10_years}'return {'success': True, 'msg': msg}insert函数的参数people通过类型标注指定为People类型 。
当我们使用 POST 方式提交数据时 , FastApi 自动会以People中定义的字段为基准来校验数据 , 发现不对就返回报错信息 。
除了开发接口变得非常简单外 , FastApi 还会自动帮我们生成接口文档 。 大家访问/docs , 可以看到接口文档已经自动生成好了:
文章插图
这个接口不仅能看 , 而且直接就能在接口页面修改样例数据 , 发送请求 , 现场测试:
- 今天才发现,微信左下角连击2下,还有隐藏功能,太实用了
- 手机|手机号不用了你以为停机就行?看完吓出一身冷汗……
- 用了两到三年的华为手机,一键打开"开发者选项",帮助性能加速
- 关于手机的谣言……别再信了
- 怎样提高苹果6的运行速度?有这些问题就别救了,你用了几年了?
- 2G/3G再见?三大运营商联手,5G或许不得不用了?
- 42岁,身家百亿,美团二把手退休:我运气实在太好
- 奇怪,手机配置不差,但用了2年后就会出现卡顿,这是为啥呢?
- 用了这么多年iPhone:第一次打开原生的科学计算器
- 苹果用了三年的刘海屏终于要变 iPhone 13原型机设计曝光
