第3节,FastAPI的路由模块

1. http请求的基础知识

路由模块是所有web框架都要提供的功能,FastAPI也不例外,路由模块要解决的问题归纳起来只有一条,那就是解决http 请求和处理函数之间的映射关系,简单的解释就是:当一个请求到来时,路由模块决定用哪个函数来处理它

对于一个请求,它有两个关键信息:

  1. abs_path
  2. method

abs_path 指定请求资源的URI(Uniform Resource Identifier,统一资源定位符),path 不包含域名,ip,端口号,也不包含query,下面是url的一般语法格式

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

用一张图来说明各个部分
fastapi

method 是请求的方法,http请求的方法一共有9种

  1. OPTIONS
  2. GET
  3. HEAD
  4. POST
  5. PUT
  6. PATCH
  7. DELETE
  8. TRACE
  9. CONNECT

最常用的是GET和POST,这是大家最为熟悉的

2. FastAPI的路由模块

下面通过一个具体例子来讲解FastAPI的路由模块

from fastapi import FastAPI

app = FastAPI()


@app.get("/get")
def get():
    return {"msg": "recv get request"}


@app.post("/post")
def post():
    return {"msg": "recv post request"}

在这个例子中,我定义了get和post两个函数,app.get 和 app.post 都是装饰器,被这两个装饰器分别装饰后,get函数只能用来处理path 为 /get 且请求方法是GET的请求,同理,post函数只能用来处理path 为 /post 且请求方法是POST的请求。在Flask框架中,get和psot函数被称之为视图函数,而在FastAPI中,被称之为操作路径函数,其实他们在本质上是一样的。

在浏览器里输入 http://127.0.0.1:8000/get 可以来验证get函数的响应结果,使用下面的代码可以验证post函数处理POST请求的结果

import requests

res = requests.post("http://127.0.0.1:8000/post")
print(res.text)

如果你希望一个函数即可以处理GET请求,也可以处理PSOT请求,则可以这样编写代码

@app.get("/test")
@app.post("/test")
def test_func():
    return {"msg": "recv http request"}

app.get 和 app.post 是可以叠加使用的,除了connect方法不支持外,其他八个请求方法FastAPI都支持,当多个装饰器用于一个函数时,你需要在处理请求时对请求方法做区分,如何获得请求的header,在后面的文章会有介绍。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案