• FastApi


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

    1、安装第三方库老生常谈了,使用 pip 或者 pipenv 即可安装 FastApi:

    pip install fastapi
    pipenv install fastapi
    

    2、安装后,来创建我们的第一个 API:

    from fastapi import FastAPI
    
    app = FastAPI()
    
    
    @app.get('/')
    def index():
        return {'message': '你已经正确创建 FastApi 服务!'}
    

    这里的写法跟 Flask 几乎一致。只不过在 Flask 中,我们定义路由的装饰器为 @app.route('/')。而这里写为 @app.get('/')

    写好代码以后,使用uvicorn来运行 FastApi。首先使用pip或者pipenv安装uvicorn:

    pip install uvicorn
    pipenv install uvicorn
    

    然后执行命令:

    uvicorn main:app --reload
    

    其中main表示我们的代码文件为main.py,app表示我们初始化的 FastApi 对象的名字。--reload参数表示在修改了代码以后立即生效,不需要重启。

    运行后,访问 http://127.0.0.1:8000 可以看到接口已经正确返回了 JSON 格式的数据。

    3、定义一个带参数的 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}
    

    4、定义一个资源的 POST 方法。

    在使用 Flask 的时候,我们需要手动验证用户 POST 提交上来的数据是什么格式的,字段对不对。

    但使用 FastApi 的时候,我们只需要类型标注就能解决所有问题。首先我们导入 from pydantic import BaseModel ,然后继承BaseModel实现我们允许 POST 方法提交上来的数据字段和格式:

    from pydantic import BaseModel
    
    app = FastAPI()
    
    
    class People(BaseModel):
        name: str
        age: int
        address: str
        salary: float
    

    People这个类通过类型标注,指定了它里面的 4 个字段和他们的类型。现在来实现 POST 方法:

    @app.post('/insert')
    def insert(people: People):
        age_after_10_years = people.age + 10
        msg = f'这个人的名字是:{people.name},十年后,此人年龄:{age_after_10_years}'
        return {'success': True, 'msg': msg}
    

    insert函数的参数people通过类型标注指定为People类型。

    当我们使用 POST 方式提交数据时,FastApi 自动会以People中定义的字段为基准来校验数据,发现不对就返回报错信息。

    另外,FastApi 会自动帮我们生成接口文档,访问http://127.0.0.1:8000/docs,看到接口文档已经生成好了。

    参考—— https://mp.weixin.qq.com/s/42-jEWAXgCswEXx-AKMD2g

  • 相关阅读:
    Codeforces Round #581 (Div. 2)
    Codeforces Round #605 (Div. 3)
    cin,cin.get(),cin.getline(),getline()
    容斥原理原理
    词法分析器
    Web学习开始。
    Convex hull凸包
    对max_flow做一个总结
    Vue中动画封装
    Vue中的动画特效
  • 原文地址:https://www.cnblogs.com/lovebkj/p/12744664.html
Copyright © 2020-2023  润新知