Python 如何从Flask中作为变量输入的表单数据?

Python 如何从Flask中作为变量输入的表单数据?,python,html,flask,routes,Python,Html,Flask,Routes,我正在开发一个简单的UI,通过ID启动和停止游戏。我编写的基本HTML如下(game\u ID由JS填充): 游戏ID: 看起来像 我还为每个表单定义了烧瓶路由函数: @app.route("/start_game/<game_id>") def start_game(game_id): # ... @app.route("/end_game/<game_id>") def end_game(game_id): # ... @app.route(

我正在开发一个简单的UI,通过ID启动和停止游戏。我编写的基本HTML如下(
game\u ID
由JS填充):


游戏ID:
看起来像

我还为每个表单定义了烧瓶路由函数:

@app.route("/start_game/<game_id>")
def start_game(game_id):
    # ...

@app.route("/end_game/<game_id>")
def end_game(game_id):
    # ...
@app.route(“/start\u game/”)
def开始游戏(游戏id):
# ...
@应用程序路径(“/end\u game/”)
def结束游戏(游戏id):
# ...
在我的表单中,如何使
游戏id
对应于
游戏id
中的
游戏id

目前,当我提交开始和结束游戏时,我收到一个文件未找到错误,因为它只是将文本
附加到路线上


我是网络开发新手。这应该是微不足道的,但我不知道该搜索什么。对于这样一个简单的问题,请先表示歉意。

您正在尝试根据用户输入生成url,但当Jinja在服务器端呈现模板时,用户输入不可用,它仅在客户端可用。因此,如果您想使用游戏id作为URL参数发布到URL,则必须使用JavaScript在客户端构建该URL

对于你想做的事情,这并不是真的必要。您可以使用
request.form['name']
获取命名输入的提交值。按钮与任何其他输入一样,因此您可以对其进行命名,以了解所采取的操作

@app.route('/manage_game', methods=['POST'])
def manage_game():
    start = request.form['action'] == 'Start'
    game_id = request.form['game_id']

    if start:
        start_game(game_id)
    else:
        stop_game(game_id)

    return redirect(url_for('index'))


甚至比你需要的还要详细。如果你知道游戏是否已经在进行中,只需切换当前状态,而不是选择动作。启动一个已经启动的游戏是没有意义的,只需停止它。

您正试图根据用户输入生成url,但当Jinja在服务器端呈现模板时,用户输入不可用,它仅在客户端可用。因此,如果您想使用游戏id作为URL参数发布到URL,则必须使用JavaScript在客户端构建该URL

对于你想做的事情,这并不是真的必要。您可以使用
request.form['name']
获取命名输入的提交值。按钮与任何其他输入一样,因此您可以对其进行命名,以了解所采取的操作

@app.route('/manage_game', methods=['POST'])
def manage_game():
    start = request.form['action'] == 'Start'
    game_id = request.form['game_id']

    if start:
        start_game(game_id)
    else:
        stop_game(game_id)

    return redirect(url_for('index'))


甚至比你需要的还要详细。如果你知道游戏是否已经在进行中,只需切换当前状态,而不是选择动作。启动一个已经启动的游戏是没有意义的,只需停止它。

我不能评论,但我想更正davidism的代码。 我相信,您需要在表单元素中使用一个与服务器python代码中的函数对应的值来执行操作。轻微的,但重要的纠正。所以它是这样的:

在server.py中:

@app.route('/manage_game', methods=['POST'])
    def manage_game():
    start = request.form['action'] == 'Start'
    game_id = request.form['game_id']

    if start:
        start_game(game_id)
    else:
        stop_game(game_id)
    return redirect(url_for('index'))
在HTML中:

<form method="POST" action=/manage_game>
    <input type="text" name="game_id"/>
    <input type="submit" name="action" value="Start"/>
    <input type="submit" name="action" value="Stop"/>
</form>

我无法发表评论,但我想更正davidism的代码。 我相信,您需要在表单元素中使用一个与服务器python代码中的函数对应的值来执行操作。轻微的,但重要的纠正。所以它是这样的:

在server.py中:

@app.route('/manage_game', methods=['POST'])
    def manage_game():
    start = request.form['action'] == 'Start'
    game_id = request.form['game_id']

    if start:
        start_game(game_id)
    else:
        stop_game(game_id)
    return redirect(url_for('index'))
在HTML中:

<form method="POST" action=/manage_game>
    <input type="text" name="game_id"/>
    <input type="submit" name="action" value="Start"/>
    <input type="submit" name="action" value="Stop"/>
</form>


@erip,只是澄清一下,“game\u id”值实际上是通过表单上方的HTML代码传递给表单元素的,但通过代码中其他地方的JS定义的,可以是HTML头文件或其他单独的文件。从这里开始:Game ID:To:you使用了输入元素的名称。game_id传递val.@erip,只是澄清一下,“game_id”值实际上是通过表单上方的HTML代码传递给表单元素的,但是通过代码中其他地方的JS定义的,可以是HTML头文件或其他单独的文件。从这里开始:Game ID:To:you使用了输入元素的名称。游戏id要通过val。