【问题标题】:Migration from flask to fastapi从烧瓶迁移到 fastapi
【发布时间】:2021-04-22 15:30:58
【问题描述】:

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

    @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"'

【问题讨论】:

标签: python fastapi


【解决方案1】:

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

@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)

【讨论】:

    【解决方案2】:

    我认为最好为 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
    

    【讨论】:

      猜你喜欢
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多