【发布时间】:2022-08-10 02:26:49
【问题描述】:
我是快速 api 的新手,我需要一些解释
我的代码:
app_code.py:
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=\"Smith\")
parser.add_argument(\"--birthday\", type=str, nargs=\'?\', default=\"2001\")
args = parser.parse_args()
return args
def create_df(name):
ar = args()
print(ar)
x = {\"name\": name, \"surname\": ar.surname, \"bd\": ar.birthday}
x = json.dumps(x)
return x
if __name__ == \"__main__\":
args_all = args()
print(f\"name: {args_all.name}, surname: {args_all.surname}, birthday:{args_all.birthday}\")
print(create_df(args_all.name))
main_api.py
from fastapi import FastAPI
from app_code import *
app = FastAPI()
@app.get(\"/names\")
async def root(name: str = \'none\'):
print(\"In progress...\")
result = create_df(name)
return result
当我正常运行它时,我的意思是只运行脚本应用程序:
python app_code.py --name=James
我得到了正确的结果:
{name:James, surname:Smith, bd:2001}
但是当我尝试将其用作 FASTApi 时,当我转到浏览器并尝试运行时,我遇到了参数问题:
api.addres.url/port/name?James
我得到了那个错误:
File \"P:\\pythonProject3\\api\\.\\app_code.py\", line 16, in create_df
ar = args()
File \"P:\\pythonProject3\\api\\.\\app_code.py\", line 11, in args
args = parser.parse_args()
File \"C:\\Users\\ubunt\\AppData\\Local\\Programs\\Python\\Python39\\lib\\argparse.py\", line 1821, in parse_args
self.error(msg % \' \'.join(argv))
File \"C:\\Users\\ubunt\\AppData\\Local\\Programs\\Python\\Python39\\lib\\argparse.py\", line 2575, in error
self.exit(2, _(\'%(prog)s: error: %(message)s\\n\') % args)
File \"C:\\Users\\ubunt\\AppData\\Local\\Programs\\Python\\Python39\\lib\\argparse.py\", line 2562, in exit
_sys.exit(status)
SystemExit: 2
←[32mINFO←[0m: 127.0.0.1:50671 - \"←[1mGET /names?name=James HTTP/1.1←[0m\" ←[91m500 Internal Server Error←[0m
正如你所看到的,我想要一些默认参数和一些需要输入的参数,比如名称,我对默认参数有疑问。
我的意思是,我知道这是因为我在我的 FastApi 中只使用了脚本中的一种方法(我可以运行整个脚本吗?),这就是我将 ar=args() 放在那里的原因。但它不能解决我的问题。
当我在浏览器中输入时,我只想获取由 create_df() 方法创建的 JSON:
`api.addres.url/port/names?James` or `api.addres.url/port/name?James&?Potter`
有人可以解释我如何修复它吗?
-
不要调用
args- 相反,让您的create_df函数将这些值作为参数,并在您的__main__方法中调用args而不是CLI 版本,并提供来自网络的值处理 API 请求时的请求。