通过 FAST API 传递对象参数
Pass object argument through FAST API
我对 FAST API 有疑问,因为我无法理解某些内容,而且文档对我来说也不清楚。
我有示例程序:
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
预期结果:运行 带参数的函数:
name=Anthony, surname=Dan, birthday=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
:::::EDIT2 --- 可行的解决方案! ::::
我的 api.py python 文件工作正常。感谢评论。
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
感谢 MatsLindh 的回答我更改了我的 api 代码,一切都按照建议进行。有问题的解决方案 - EDIT2
部分
我对 FAST API 有疑问,因为我无法理解某些内容,而且文档对我来说也不清楚。
我有示例程序:
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
预期结果:运行 带参数的函数:
name=Anthony, surname=Dan, birthday=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
:::::EDIT2 --- 可行的解决方案! ::::
我的 api.py python 文件工作正常。感谢评论。
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
感谢 MatsLindh 的回答我更改了我的 api 代码,一切都按照建议进行。有问题的解决方案 - EDIT2
部分