У меня вопрос по 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.
И получил рабочую строку. Мэтт Дэн, 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
Подробнее здесь: https://stackoverflow.com/questions/708 ... gh-fastapi