如何使用Python、Flask和命令行传递URL参数

4
我是一个有用的助手,可以为您翻译文本。

我在使用request.args.get时遇到了很多传递URL参数的问题。

我的代码如下:

from flask import Flask, request
app= Flask(__name__)

@app.route('/post?id=post_id', methods=["GET"])
def show_post():
    post_id=1232
    return request.args.get('post_id')

if __name__=="__main__":
     app.run(host='0.0.0.0')

保存后,我总是在命令行中键入python filename.py,看到命令行返回“Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)”后,再在Chrome中输入URL(http://ip_addres:5000/post?id=1232)以查看是否会返回1232,但它却不起作用!请帮忙。

2个回答

12

你应该将查询参数从路由中删除,因为它们不是路由的一部分。

@app.route('/post', methods=['GET'])
def show_post():
    post_id = request.args.get('id')
    return post_id
< p >request.args是一个字典,其中包含URL中传递的所有查询参数。


那么URL是什么呢?非常感谢! - SAS
URL仍将是http://<IP地址>:5000/post?id=1232id是一个查询参数,将出现在request.args字典中,其值为1232。请注意,我编辑了上面的答案以更正参数名称。 - bdjett
1
所以基本上,request.args.get('id')会自动将参数插入URL中? - SAS
不,完全不是。您输入的URL是http://127.0.0.1:5000/post?id=1232。Flask将截取查询字符串,即?id=1232,并匹配实际路径,即/post。该路径被路由到show_post函数。request.args是一个字典,包含与URL一起传递的所有查询参数,在这种情况下是键为id,值为1232。在这里,request.args将是一个类似于{"id": "1232"}的字典。 - bdjett
@SAS请看一下我的答案。 - Raja Simon

6

request.args is what you are looking for.

@app.route('/post', methods=["GET"])
def show_post()
    post_id = request.args.get('id')

request.args是获取所有GET参数并构造类似于Multidict的字典,示例为 MultiDict([('id', '1232'),]),所以使用get可以获取到id。


非常感谢!那么URL是什么,请? - SAS
好的,太棒了!:D 非常感谢!你的回答同样很有帮助!现在我不仅可以使用你们提供的代码,还能理解它的作用 :) - SAS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接