栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

fastapi获取请求参数

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

fastapi获取请求参数

GET

代码:

from fastapi import FastAPI, Request
import uvicorn
import time
import requests
​
app = FastAPI()
​
@app.get("/test")
def test(parameter: str = ''):
    rdat = "default"
    if parameter != "":
        rdat = 'Get value: '+ parameter
    return rdat
​
if __name__ == '__main__':
    uvicorn.run(app='main:app', host='0.0.0.0', port=8811,
                proxy_headers=True, forwarded_allow_ips='*',reload=True)
​

测试结果:

访问:http://127.0.0.1:8811/test
响应:"default"
​
访问:http://127.0.0.1:8811/test?parameter
响应:"default"
​
访问:http://127.0.0.1:8811/test?parameter=12
响应:"Get value: 12"
​
访问:http://127.0.0.1:8811/test?parameter=%2256%22
响应:"Get value: "56""

报错&解析:

如下代码:

# ...
def test(parameter: str = ''):
    rdat = "default"
    # ...

里面的parameter: str = ''实际是在指定`parameter的类型和默认值。

如果写成这样:

# ...
def test(parameter: str):
    rdat = "default"
    # ...

也能运行,但如果这时候请求里没有parameter这个参数,就会报错:

{"detail":[{"loc":["query","parameter"],"msg":"field required","type":"value_error.missing"}]}

以下是测试:

访问:http://127.0.0.1:8811/test
响应:{"detail":[{"loc":["query","parameter"],"msg":"field required","type":"value_error.missing"}]}
​
访问:http://127.0.0.1:8811/test?parameter
响应:"default"
POST

代码

服务端:

from fastapi import FastAPI, Request
import uvicorn
import time
import requests
from pydantic import baseModel
​
app = FastAPI()
​
class hkk(baseModel):
    parameter: str
    i: int
​
@app.post("/post1")
def post1(item: hkk,t1:str=''):
    print(item)
    print(item.i)
    print(t1)
    return item
​
if __name__ == '__main__':
    uvicorn.run(app='main:app', host='0.0.0.0', port=8811,
                proxy_headers=True, forwarded_allow_ips='*',reload=True)

客户端:

import requests
​
url = 'http://127.0.0.1:8811/post1?t1=75'
​
dat = {
    'parameter':'abc',
    'i':12
}
r = requests.post(url=url,json=dat)
​
print(r.text)

测试结果:

服务端

INFO:     Will watch for changes in these directories: ['D:\']
INFO:     Uvicorn running on http://0.0.0.0:8811 (Press CTRL+C to quit)
INFO:     Started reloader process [19520] using statreload
INFO:     Started server process [15068]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
parameter='abc' i=12
12
75
INFO:     127.0.0.1:1765 - "POST /post1?t1=75 HTTP/1.1" 200 OK

客户端:

{"parameter":"abc","i":12}

报错&解析:

客户端下面这句:

r = requests.post(url=url,json=dat)

如果是写成这样:

r = requests.post(url=url,data=dat)

就会报如下错误:

INFO:     127.0.0.1:1442 - "POST /post1 HTTP/1.1" 422 Unprocessable Entity

一些需要注意的地方

服务端可以用下面这种方法指定默认值:

# ....

class hkk(baseModel):
    parameter: str = ""
    i: int = 0

# ....

客户端测试代码 - 1:

import requests

url = 'http://127.0.0.1:8811/post1?t1=75'

dat = {}
r = requests.post(url=url,json=dat)

print(r.text)

客户端测试代码 - 2:

import requests

url = 'http://127.0.0.1:8811/post1?t1=75'

dat = {}
r = requests.post(url=url)

print(r.text)

测试结果

客户端测试代码 - 1:
正常返回默认值
-----------------------
客户端测试代码 - 2:
报错,返回:{"detail":[{"loc":["body"],"msg":"field required","type":"value_error.missing"}]}
控制台显示:INFO:     127.0.0.1:1169 - "POST /post1?t1=75 HTTP/1.1" 422 Unprocessable Entity

总结

url参数传参数名,post数据传包含数据的类。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/733964.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号