新手入门fastapi最新版——第一部分

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。

本人也是新手,其中我也有改名,截图有不同水印请勿见怪,本文章当成学习分享,如有错误,请多担当。使用的是pycharm

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

源码: GitHub - tiangolo/fastapi: FastAPI framework, high performance, easy to learn, fast to code, ready for production

一、体验

首先体验官网给出的代码段

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}
uvicorn main:app --reload

 在终端使用,当你想结束时,只需在终端按ctrl+c即可

 出现

 在浏览器中打开可得

如果想要实现交互式文档,只需在后面加上/docs

 二、了解参数

如其中的@app.get("/") 告诉 FastAPI 在它下方的函数负责处理如下访问请求:

还有其他的参数:

  • @app.post()
  • @app.put()
  • @app.delete()

以及更少见的:

  • @app.options()
  • @app.head()
  • @app.patch()
  • @app.trace()

这里先对@app.get("/")进行分析

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id):
    return {"item_id": item_id}

 你在运行的时候,则后面网址需要加上/items/和你想要输入item_id的值,例:

当然了,你可以在后面填上你所有你想要的值,包括你可以限制填入的值是int或者str之类的

 只要将相关代码进行修改即可:

async def read_item(item_id: int):

当然了,有些朋友看见async的时候表示不理解,我刚开始也不理解,后来知道了async的作用就是:

  • 如果这个请求比较慢,比如连接数据库读取数据、文件IO、rpc调用等一般加上async,我想普通项目里大部分请求都会多多少少跟数据库打交道,所以加的往往比较多;
  • 但是对于我们学习使用可以不添加,因为或多或少会增加开销,不过可以忽略

 而且我们需要注重它的顺序,这个在官方文档就有提及

由于路径操作是按顺序依次运行的,你需要确保路径 /users/me 声明在路径 /users/{user_id}之前:

from fastapi import FastAPI

app = FastAPI()


@app.get("/users/me")
async def read_user_me():
    return {"user_id": "the current user"}


@app.get("/users/{user_id}")
async def read_user(user_id: str):
    return {"user_id": user_id}

 否则,/users/{user_id} 的路径还将与 /users/me 相匹配,"认为"自己正在接收一个值为 "me" 的 user_id 参数。

三、预设值

它可以创建enum类

from enum import Enum

from fastapi import FastAPI


class ModelName(str, Enum):
    alexnet = "alexnet"
    resnet = "resnet"
    lenet = "lenet"


app = FastAPI()


@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
    if model_name == ModelName.alexnet:
        return {"model_name": model_name, "message": "Deep Learning FTW!"}

    if model_name.value == "lenet":
        return {"model_name": model_name, "message": "LeCNN all the images"}

    return {"model_name": model_name, "message": "Have some residuals"}

 运行结果如下

你也可以查看交互式文档,因为已经指定了路径参数的可用值,所以交互式文档可以恰当地展示它们。

http://127.0.0.1:8000/docs#/default/get_model_models__model_name_get

点击try it out,即可选择自己想要的神经网络类型

然后点击Execute即可

四、查询参数

查询字符串是键值对的集合,这些键值对位于 URL 的  之后,并以 & 符号分隔。

from fastapi import FastAPI

app = FastAPI()

fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]


@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
    return fake_items_db[skip : skip + limit]

 在终端输入这个即可

http://127.0.0.1:8000/items/?skip=0&limit=10

 当然你可以对参数进行更改,比如skip=20,limit不输入,就会skip输入20,limit保持默认值10

五、可选参数

通过同样的方式,你可以将它们的默认值设置为 None 来声明可选查询参数:

from typing import Optional

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Optional[str] = None):
    if q:
        return {"item_id": item_id, "q": q}
    return {"item_id": item_id}

切记的时如果要输入q的值,请记得输入英文的?,并且要写q=你想要的值。

如:

http://127.0.0.1:8000/items/%E5%93%88%E5%93%88?q=%E6%88%91%E6%98%AF%E5%82%BB%E8%9B%8B

六、必选参数

当你想让一个查询参数成为必需的,不声明任何默认值就可以:

async def read_user_item(item_id: str, needy: str):

没填完必选参数则会报错

 

 提醒:两个参数,第二个参数需要写名称:,中间用英文?连接

本节内容就到这里啦,我也会接着学习,大家当看看笑话就可以啦 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值