我确定某个地方可能存在此问题的重复,但我不知道我所提出的问题的正确措词是什么。
我有要到达的端点,并且在它们上运行了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>')
将被烧瓶翻译成
/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}
另一个解决方案