Flask api 具有多个查询参数的端点
Flask api endpoint with multiple query parameters
我确定这个问题可能在某处重复,但我不知道我的问题的正确措辞是什么。
我有我想要到达的端点,我在它们上面 运行 curl
命令:
curl http://0.0.0.0:5001/job/task/?job_type=medicine&task_type=research
curl http://0.0.0.0:5001/job/task/?job_type=medicine&task_type=research&job_id=123
我得到的错误是:
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>
我的部分代码如下所示,我感觉这与我使用的方式有关 api.add_resource
:
from flask import Flask
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class Test(Resource):
def get(self,job_type,task_type,task_id = None):
if not task_id:
return {"job_type":job_type,"task_type":task_type}
return {"job_type":job_type,"task_type":task_type,"job_id":job_id}
api.add_resource(Test, '/job/task/?<string:job_type>&<string:task_type>', '/job/task/?<string:job_type>&<string:task_type>&<int:job_id>')
如何修复错误?
你的烧瓶路线
api.add_resource(Test, '/job/task/?<string:job_type>&<string:task_type>', '/job/task/?<string:job_type>&<string:task_type>&<int:job_id>')
将由 flask 翻译成
/job/task/?job_type&task_type
没有
/job/task/?job_type=xxx&task_type=yyy
这会导致端点未找到错误。
解决方案
您可以使用 request.args
(https://flask.palletsprojects.com/en/1.1.x/api/#flask.Request.args)
访问查询字符串
因此,您的 url 定义应该类似于
api.add_resource(Test, '/job/task/')
在你看来
from flask import request
.....
def get(self):
job_type = request.args.get("job_type")
task_type = request.args.get("task_type")
task_id = request.args.get("task_id")
if not task_id:
return {"job_type":job_type,"task_type":task_type}
return {"job_type":job_type,"task_type":task_type,"job_id":job_id}
另一种解决方案:
我确定这个问题可能在某处重复,但我不知道我的问题的正确措辞是什么。
我有我想要到达的端点,我在它们上面 运行 curl
命令:
curl http://0.0.0.0:5001/job/task/?job_type=medicine&task_type=research
curl http://0.0.0.0:5001/job/task/?job_type=medicine&task_type=research&job_id=123
我得到的错误是:
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>
我的部分代码如下所示,我感觉这与我使用的方式有关 api.add_resource
:
from flask import Flask
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class Test(Resource):
def get(self,job_type,task_type,task_id = None):
if not task_id:
return {"job_type":job_type,"task_type":task_type}
return {"job_type":job_type,"task_type":task_type,"job_id":job_id}
api.add_resource(Test, '/job/task/?<string:job_type>&<string:task_type>', '/job/task/?<string:job_type>&<string:task_type>&<int:job_id>')
如何修复错误?
你的烧瓶路线
api.add_resource(Test, '/job/task/?<string:job_type>&<string:task_type>', '/job/task/?<string:job_type>&<string:task_type>&<int:job_id>')
将由 flask 翻译成
/job/task/?job_type&task_type
没有
/job/task/?job_type=xxx&task_type=yyy
这会导致端点未找到错误。
解决方案
您可以使用 request.args
(https://flask.palletsprojects.com/en/1.1.x/api/#flask.Request.args)
因此,您的 url 定义应该类似于
api.add_resource(Test, '/job/task/')
在你看来
from flask import request
.....
def get(self):
job_type = request.args.get("job_type")
task_type = request.args.get("task_type")
task_id = request.args.get("task_id")
if not task_id:
return {"job_type":job_type,"task_type":task_type}
return {"job_type":job_type,"task_type":task_type,"job_id":job_id}
另一种解决方案: