具有多个查询参数的Flask api端点

2024-04-24 23:39:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我肯定这个问题可能有重复的地方,但我不知道什么是正确的措辞是我的问题。你知道吗

我有要访问的端点,并对它们运行了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>')

如何修复错误?你知道吗


Tags: apiidhttptaskstringtitletype错误
1条回答
网友
1楼 · 发布于 2024-04-24 23:39:36

你的烧瓶路线

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.argshttps://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}

其他解决方案

  1. 使用封送处理https://flask-restful.readthedocs.io/en/latest/api.html#flask_restful.marshal
  2. 使用reqparsehttps://flask-restful.readthedocs.io/en/latest/api.html#reqparse.RequestParser.parse_args

相关问题 更多 >