在Flask中使用请求args作为变量URL

时间:2016-11-01 21:33:51

标签: python flask

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

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

并返回一个输出类似

的简单页面
First id = 123, second id = 456, third id = 789

我运行此脚本,当在示例URL中进行硬编码时,我无法获取请求args以返回除None之外的任何内容。我已经尝试将int格式化为字符串和类似的东西 - 在任何情况下都不能让请求args工作。

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

我的第二个问题,即在我可以获得请求args之后将解决的问题是,我无法以这种方式配置route()来处理变量URL。我只能通过将页面硬编码到路由来加载页面。我使用会话单独尝试这样做,但同样不成功。

2 个答案:

答案 0 :(得分:6)

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)

答案 1 :(得分:4)

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

路径参数

路径参数是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