将Flask中的请求参数用于变量URL

2024-04-27 04:59:49 发布

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

我的目标是运行一个Flask应用程序,该应用程序将获得此表单的URL,其中的id各不相同:

http://localhost:5000/Longword/game?firstid=123&secondid=456&thirdid=789

返回一个简单的页面,输出如下内容

First id = 123, second id = 456, third id = 789

我运行这个脚本,当在示例URL中进行硬编码时,我不能让请求参数返回任何内容,但不能返回任何内容。我已经尝试过将int格式化为字符串和其他类似的东西——在任何情况下都不能让请求参数工作。

import os
import json
from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/')
def main():
    return "on main home page"

@app.route('/longword/gameid=123&playerid=456')
def Longword():
    user = request.args.get('gameid')
    return "got hardcode %d" % gameid

我的第二个问题是,在我可以让请求参数继续运行之后,我不能配置route()来处理变量URL,我只能通过将页面硬编码到route来加载页面。我使用sessions单独尝试了一下,但同样没有成功。


Tags: importidapp应用程序urlflask内容编码
2条回答

?之后需要route('/longword/')无参数

然后可以在?之后使用参数运行

http://localhost:5000/longword/?gameid=123&playerid=456

在函数中,您可以使用request.args.get()获取这个参数

@app.route('/longword/')
def longword():

    gid = request.args.get('gameid')
    pid = request.args.get('playerid')

    return "GID: %s  PID: %s" % (gid, pid)

最后一件事:即使发送数字,参数也是字符串,因此需要%s,而不是%d


顺便说一句:你可以运行这个网址也没有一些参数即

http://localhost:5000/longword/?gameid=123
http://localhost:5000/longword/?playerid=456
http://localhost:5000/longword/

你可以用request.args.get()设置默认值

    gid = request.args.get('gameid', 'default gameid')
    pid = request.args.get('playerid', 'default playerid')

如果不使用自己的默认值,则request.args.get()将使用None

    gid = request.args.get('gameid')
    pid = request.args.get('playerid')

    if not gid or not pid:
        return "You forgot gameid or playerid"

    return "GID: %s  PID: %s" % (gid, pid)

不要混淆查询参数和路径参数。

路径参数

路径参数是URL路径部分的变量。

@app.route('/longword/game_id/')
def longword(game_id):
    [...]

您可以选择指定此类参数的类型:

@app.route('/longword/<int:game_id>/')
def longword(game_id):
    [...]

要调用该函数,您需要GET

http://localhost:5000/longword/123/

这些参数不能是可选的(除非没有它们声明另一个路由)。URL中未命名参数,但参数/值关联不含糊。想想位置参数

查询参数

查询参数位于查询字符串中(在?之后)。

@app.route('/longword/')
def longword(game_id):
    game_id = request.args.get('gameid')
    return "got hardcode %d" % game_id

在这种情况下,参数对于路由是未知的。您可以从请求对象获取它们。注意,这里没有验证,所以必须覆盖丢失或类型错误的情况。

要调用该函数,您需要GET

http://localhost:5000/longword/?gameid=123&playerid=456

查询参数可以按任意顺序提供,并且它们可以是可选的,具体取决于您在函数中所做的操作。想想关键字参数

注意:要获得函数参数的验证,您可能需要查看webargs

相关问题 更多 >