通过FastAPI传递对象参数

问题描述 投票:0回答:1

我对 FastAPI 有疑问,因为我无法理解一些东西,并且文档对我来说不清楚。

我有示例程序:

import json
import argparse


def args():
    parser = argparse.ArgumentParser("Some argumets")
    parser.add_argument("--name", type=str)
    parser.add_argument("--surname", type=str, nargs='?', default="Dan")
    parser.add_argument("--birthday", type=str, nargs='?', default="1995")

    args = parser.parse_args()
    return args


class Simple():


    def create_df(self, name, surname, birthday):

        x = {"name": name, "surname": surname, "bd": birthday}

        x = json.dumps(x)

        return x


if __name__ == "__main__":
    args_all = args()
    s = Simple()
    print(f"name: {args_all.name}, surname: {args_all.surname}, birthday:{args_all.birthday}")
    print(s.create_df(args_all.name, args_all.surname, args_all.birthday))

我可以通过以下方式运行它:

python app.py --name=Matt --surname=Dan  #And let's say that birthday is 1995 is default one.

并获得工作弦 Matt Dan 1995

现在我希望通过 FAST API 向用户公开它。它可以创建如下请求:

www.api_adress.domain/names?name=Anthony&birthday=33

预期结果:运行带有参数的函数:

姓名=安东尼,姓氏=丹,生日=33

正如你所见,我需要一些默认值,但可以由用户更改。

我的api_code:

from fastapi import FastAPI
from app_code import *

app = FastAPI()

o = Simple()
args = args()

name = args.name
surname = args.surname
birthday = args.birthday

print(args)

@app.get("/names")
async def root(name=args.name, surname=args.surname, birthday = birthday.args.birthday):
    print("In progress...")
    result = Simple.create_df(name=name, surname=surname, birthday=birthday)
    return result

当然,我尝试了很多配置(仍在寻找解决方案),但仍然遇到如下错误:

←[33mWARNING←[0m:  The --reload flag should not be used in production on Windows.
usage: Some argumets [-h] [--name NAME] [--surname [SURNAME]] [--birthday [BIRTHDAY]]
Some argumets: error: unrecognized arguments: main_api:app --reload

我有一些问题需要理解,并试图解决它。如何像普通程序一样传递带有一些默认值的参数?因此,如果有人能向我解释一下,我将不胜感激!

我还尝试将我的 API 更改为:

@app.get("/names")
async def root(name: str, surname: str = "Dan", birthday: str = "2020"):
    print("In progress...")
    result = Simple.create_df(name=name, surname=surname, birthday=birthday)
    return result

并出现以下错误:

←[32mINFO←[0m:     Uvicorn running on ←[1mhttp://127.0.0.1:8000←[0m (Press CTRL+C to quit)
←[32mINFO←[0m:     Started reloader process [←[36m←[1m20260←[0m] using ←[36m←[1mwatchgod←[0m
←[33mWARNING←[0m:  The --reload flag should not be used in production on Windows.
usage: Some argumets [-h] [--name NAME] [--surname [SURNAME]] [--birthday [BIRTHDAY]]
Some argumets: error: unrecognized arguments: main_api:app --reload
python api fastapi
1个回答
0
投票

我将 api.py 文件更改为以下内容,一切都按预期工作。

from fastapi import FastAPI
from app_code import *
from pydantic import *

app = FastAPI()

o = Simple()


@app.get("/names")
async def root(name: str, surname: str = "Dan", birthday: str = "2020"):
    print("In progress...")
    result = o.create_df(name=name, surname=surname, birthday=birthday)
    return result
© www.soinside.com 2019 - 2024. All rights reserved.