从烧瓶迁移到 fastapi

时间:2021-04-22 15:30:58

标签: python fastapi

我有一个使用 Flask 运行的应用程序,我正在向正文发送一些数据。下面是我的代码。

    @app.route('/<string:sr>/<string:file>', methods=['GET', 'POST'])
def home(sr, file):
    if request.method == "POST":
        # the post request sent contains id, dbuser, dbauth, ruser as form data.
        rid = request.form.get('id')
        duser = request.form.get('dbuser')
        dpwd = request.form.get('dbauth')
        ruser = request.form.get('ruser')

我无法在 fastapi 中找到如何获取此内容

from fastapi import FastAPI, Request, Form
import HeapParser
import urllib3
import os
from datetime import datetime
import uvicorn

@app.post('/')
async def root(request: Request):
    print(ctime())
    form = await request.form()
    print(form)

使用这个 Curl 查询:

curl --location --request POST 'https://x.x.x.x/' \
--form 'rid="sdf"' \
--form 'dbuser="asdf"' \
--form 'dbauth="asdfasdf"' \
--form 'ruser="asldhjflas"'

2 个答案:

答案 0 :(得分:0)

我能够使用以下代码完成这项工作:

@app.post('/')
def lower_case(sr: str = Form(...), file: str = Form(...), dbuser: str = Form(...), dbauth: str = Form(...), ruser: str = Form(...), rid: str = Form(...)):
    print(ctime())
    print(sr)
    print(file)
    print(rid)

答案 1 :(得分:0)

我认为最好为 post body 请求创建一个 pydantic 模型。这是保护发布请求的更有效的方法。

class FormBody(BaseModel):
rid: int
dbuser: str
dbauth: str
ruser: str

@app.post("/")
async def default_post(form: FormBody):
 print(form.rid)
 print(form.dbuser)
 print(form.dbauth)
 print(form.ruser)
 return form