我对 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
我将 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