1024程序员节——FastAPI专栏开篇(一)

  • 时间:
  • 来源:互联网
  • 文章标签:

前言

  • 该教程适合非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 框架

关键特性:

  • 快速:可与 NodeJSGo 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
  • 高效编码:提高功能开发速度约 200% 至 300%。*
  • 更少 bug:减少约 40% 的人为(开发者)导致错误。*
  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
  • 简单:设计的易于使用和学习,阅读文档的时间更短。
  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。
  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。

(img-FMTBlT45-1603515679521)(fastAPI.assets/image-20201015020307034.png)]

文档: https://fastapi.tiangolo.com

源码: https://github.com/tiangolo/fastapi

依赖安装

  • 环境python3.6以上版本
  • 安装fastapi
pip install fastapi
  • 你还会需要一个 ASGI 服务器,生产环境可以使用 Uvicorn 或者 Hypercorn。
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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t0FbgrEr-1603515679530)(fastAPI.assets/image-20201024025138061.png)]

使用浏览器访问 http://127.0.0.1:8000/

你将会看到如下 JSON 响应:

{"message":"hello FastAPI"}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gofcsmDf-1603515679532)(fastAPI.assets/image-20201024025302957.png)]

  • 恭喜你你已经成功通过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
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DNNWlv7x-1603515679535)(fastAPI.assets/image-20201024033213991.png)]

  • 后台结果:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AXlMWNaY-1603515679537)(fastAPI.assets/image-20201024033250243.png)]

简单练习

  • 实现加法

    # 编写对应的接口实现加法运算
    
    @app.get("/add/{num1}/{num2}")
    async def add(num1:int,num2:int):
        sum = num1 + num2
        return sum
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8OGeRP0w-1603515679538)(fastAPI.assets/image-20201024033822176.png)]

查询参数

  • 声明不属于路径参数的其他功能参数时,它们将自动解释为“查询”参数。
    例:

    @app.get("/goods/")
    async def goodsMessage(goodsid:int,Price:int):
        print("商品id:%s"%goodsid)
        print("商品价格:%s"%Price)
        return {"商品id":goodsid,"商品价格":Price}
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V6Q6nWM2-1603515679542)(fastAPI.assets/image-20201024035436864.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RyGkA9LW-1603515679544)(fastAPI.assets/image-20201024040036488.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ErYHdrQi-1603515679546)(fastAPI.assets/image-20201024041358879.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pVLpV4fq-1603515679547)(fastAPI.assets/image-20201024042047377.png)]

小结


  • FastAPI 轻量级,容易上手安装快速
  • 很少的几行代码就可以实现接口的快速开发,没有web基础的同学也能很快上手
  • 支持Resutful开发风格,利用装饰器,搭建接口迅速

本文链接http://www.taodudu.cc/news/show-1781805.html