• python+uvicorn+fastapi (一)


    python+uvicorn+fastapi

    背景

    使用python的同学,有没有因为不知道用什么接口来测试自己的代码而郁闷?这里我们使用python+uvicorn+fastapi来写一些接口DEMO,DEMO中的接口可能包含form-data、x-www-form-urlencoded、json的等等。

    安装和运行

    安装

    pip install fastapi
    

    FastAPI 是一个为你的 API 提供了所有功能的 Python 类

    ASGI 服务器,生产环境可以使用 Uvicorn

    pip install uvicorn[standard]
    

    示例

    __author__ = 'kangpc'
    __date__ = '2021-6-27 22:51'
    
    from typing import Optional
    import uvicorn
    from fastapi import FastAPI
    
    app = FastAPI()
    
    
    @app.get("/")
    def read_root():
        return {"Hello": "World"}
    
    
    @app.get("/items/{item_id}")
    def read_item(item_id: int, q: Optional[str] = None):
        return {"item_id": item_id, "q": q}
    

    详细解释:

    @app.get("/items/{item_id}") 
    

    路径操作装饰器,告诉fastapi在该装饰器下方的read_item函数是负责处理如下请求的:

    • 请求路径为/items/{item_id}
    • 使用get操作
    def read_item(item_id: int, q: Optional[str] = None)
    

    read_item函数有两个参数item_id,q,且item_id是int型且必填,q是字符串类型且默认值为None的可选参数

    `return {"item_id": item_id, "q": q}`
    

    return的对象就是返回内容reponse ,你可以返回一个 dictlist,像 strint 一样的单个值等等。

    启动server两个方式

    1.命令行启动

    D:myproject20210622	est_server>uvicorn example:app --port 8002 --reload
    INFO:     Started server process [32504]
    INFO:     Waiting for application startup.
    INFO:     Application startup complete.
    INFO:     Uvicorn running on http://127.0.0.1:8002 (Press CTRL+C to quit)
    

    example:example.py 文件(一个 Python "模块")。
    app:在 main.py 文件中通过 app = FastAPI() 创建的对象。
    --reload:让服务器在更新代码后重新启动。仅在开发时使用该选项。

    2.代码里面写main函数,在main函数里指定app、主机、端口,直接运行代码启动

    if __name__ == '__main__':
        uvicorn.run(app='example:app', host="127.0.0.1", port=8001, reload=True, debug=True)
    

    运行起来后,因为示例是get请求,可以直接在浏览器看一下效果:

    浏览器输入http://127.0.0.1:8002/items/100?q=1 回车,你会看到页面显示的返回内容为:

    {"item_id":100,"q":"1"}
    

    引用官方的总结

    • 导入 FastAPI
    • 创建一个 app 实例。
    • 编写一个路径操作装饰器(如 @app.get("/"))。
    • 编写一个路径操作函数(如上面的 def root(): ...)。
    • 运行开发服务器(如 uvicorn main:app --reload)。

    交互式 API 文档

    [swagger-ui]: (http://127.0.0.1:8002/docs)

    写好接口后,框架自动生成fastapi swagger-ui文档,灰常好用。

    可选依赖

    用于 Pydantic:

    用于 Starlette:

    • requests - 使用 TestClient 时安装。
    • aiofiles - 使用 FileResponseStaticFiles 时安装。
    • jinja2 - 使用默认模板配置时安装。
    • python-multipart - 需要通过 request.form() 对表单进行「解析」时安装。
    • itsdangerous - 需要 SessionMiddleware 支持时安装。
    • pyyaml - 使用 Starlette 提供的 SchemaGenerator 时安装(有 FastAPI 你可能并不需要它)。
    • graphene - 需要 GraphQLApp 支持时安装。
    • ujson - 使用 UJSONResponse 时安装。

    用于 FastAPI / Starlette:

    • uvicorn - 用于加载和运行你的应用程序的服务器。
    • orjson - 使用 ORJSONResponse 时安装。

    你可以通过 pip install fastapi[all] 命令来安装以上所有依赖。

    更多学习笔记移步 https://www.cnblogs.com/kknote
  • 相关阅读:
    静态方法、类方法、属性方法
    B-tree/B+tree
    支付宝
    七牛云上传视频3
    测试理论
    测试理论
    Xshell上传文件
    iptables增加、删除、修改、查询、保存防火墙策略教程
    docker私有仓库常用命令
    centos7修改主机名
  • 原文地址:https://www.cnblogs.com/kknote/p/14985301.html
Copyright © 2020-2023  润新知