FastAPI快速上手非常好用

当我们开发的东西需要做成api接口的时候,可以使用fastapi来快速完成。
首先需要下载需要的包:fastapi,uvicorn,pydantic
做成接口的主要问题就是数据如何传输,如何传参给接口,如何让接口返回数据
首先我们可以看一下数据类型的定义方法

from pydantic import BaseModel
from typing import *
class my_data(BaseModel):
    list_data: Optional[List] = None
    dict_data: Optional[Dict] = None
    str_data: Optional[str] = None
    bool_data: Optional[bool] = None
    int_data: Optional[int] = None

使用pydantic来帮助我们定义数据类型,这样定义的数据类型,我们传输数据的时候可以用表单的方式进行数据传入,比较方便。
Optional[List]=None的用处就是定义这个参数的数据类型,并且可缺省,缺省值为None
下面我们可以定义我们的接口函数传入参数

#处理数据函数
def test_data(my_data: my_data, float_data: Optional[float] = 0.1):
  pass

my_data就是上面定义的数据类,可以传入复杂的数据组合
float_data: Optional[float] = 0.1这样也可以定义传入的数据,数据类型为float,缺省值为0.1,但是传入参数的方式是地址栏的方式
下面给一个完整的测试数据的接口函数,主要用来看参数是否传递成功。

处理数据函数

def test_data(my_data: my_data, float_data: Optional[float] = 0.1):
    # 接受数据
    list_data = my_data.list_data
    dict_data = my_data.dict_data
    str_data = my_data.str_data
    bool_data = my_data.bool_data
    int_data = my_data.int_data
    
    data = {}
    data["list_data"] = list_data
    data["dict_data"] = dict_data
    data["str_data"] = str_data
    data["bool_data"] = bool_data
    data["int_data"] = int_data
    data["float_data"] = float_data
    data["list_data_type"] = str(type(list_data))
    data["dict_data_type"] = str(type(dict_data))
    data["str_data_type"] = str(type(str_data))
    data["bool_data_type"] = str(type(bool_data))
    data["int_data_type"] = str(type(int_data))
    data["float_data_type"] = str(type(float_data))
    return data

test_data是我们定义的接口函数,此时我们需要绑定到对应的路由上并设置服务器启动的端口等。

from fastapi import FastAPI
import uvicorn
app = FastAPI()
# 一个函数一条api路径
app.post("/getData",
            summary="测试数据传参",
            )(test_data)
uvicorn.run(app, host='0.0.0.0', port=8000, workers=1)  # 在指定端口和主机上启动应用

此时运行,我们就能够启动服务器了

在这里插入图片描述

启动成功就是这样简短的信息。
此时我们可以使用向服务器发送请求进行访问了

import requests

# 请求的 URL
url = "http://127.0.0.1:8000/getData"

data = { # 变量名要一一对应
    "list_data":["icyhunter", "icy", "hunter"],
    "dict_data":{"name":"icyhunter", "age":18},
    "str_data":"icyhunter",
    "bool_data":True,
    "int_data":20,
}
# 发送 POST 请求
response = requests.post(url, json=data, params={"float_data":0.1})
# 打印响应内容
print(response.status_code)
data = response.json()
print(data)
print("*"*10)
for k, v in data.items():
    print(k, v)

url = "http://127.0.0.1:8000/getData"就是之前/getData绑定了test_data接口的访问地址
data就是我们需要传入的数据
float_data就是通过地址栏方式传入数据
然后发送请求,获取返回的结果。
运行后可以看到:

添加图片注释,不超过 140 字(可选)
接口正常,数据返回也正常。
那么此时只需要根据甲方的要求传入指定的数据,然后返回指定的数据,我们接口就封装完成了。
完整代码如下:
main.py:

from fastapi import FastAPI
import uvicorn

from pydantic import BaseModel
from typing import *

# 定义数据
class my_data(BaseModel):
    list_data: Optional[List] = None
    dict_data: Optional[Dict] = None
    str_data: Optional[str] = None
    bool_data: Optional[bool] = None
    int_data: Optional[int] = None

# 处理数据函数
def test_data(my_data: my_data, float_data: Optional[float] = 0.1):
    # 接受数据
    list_data = my_data.list_data
    dict_data = my_data.dict_data
    str_data = my_data.str_data
    bool_data = my_data.bool_data
    int_data = my_data.int_data
    
    data = {}
    data["list_data"] = list_data
    data["dict_data"] = dict_data
    data["str_data"] = str_data
    data["bool_data"] = bool_data
    data["int_data"] = int_data
    data["float_data"] = float_data
    data["list_data_type"] = str(type(list_data))
    data["dict_data_type"] = str(type(dict_data))
    data["str_data_type"] = str(type(str_data))
    data["bool_data_type"] = str(type(bool_data))
    data["int_data_type"] = str(type(int_data))
    data["float_data_type"] = str(type(float_data))
    return data



app = FastAPI()
# 一个函数一条api路径
app.post("/getData",
            summary="测试数据传参",
            )(test_data)

uvicorn.run(app, host='0.0.0.0', port=8000, workers=1)  # 在指定端口和主机上启动应用

test.py:

import requests

# 请求的 URL
url = "http://127.0.0.1:8000/getData"

data = { # 变量名要一一对应
    "list_data":["icyhunter", "icy", "hunter"],
    "dict_data":{"name":"icyhunter", "age":18},
    "str_data":"icyhunter",
    "bool_data":True,
    "int_data":20,
}
# 发送 POST 请求
response = requests.post(url, json=data, params={"float_data":0.1})
# 打印响应内容
print(response.status_code)
data = response.json()
print(data)
print("*"*10)
for k, v in data.items():
    print(k, v)

装好必要的包之后,先运行main.py,再运行test.py
这样就可以直接上手了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Icy Hunter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值
>