当前位置: 首页 > 知识库问答 >
问题:

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

朱英范
2023-03-14

我正在开发一个简单的用户界面来启动和停止游戏。我编写的基本超文本标记语言如下(game_id由JS填充):

  <div align="center" class="top">
    <div align="left" class="game-id-input">
      Game ID: <input type="text" name="game_id" id="game_id">
    </div>

    <div align="right" class="buttons">
      <form action="{{ url_for('start_game', game_id=game_id) }}" method="get">
        <input type="submit" name="start" value="Start game" class="btn btn-success"></input>
      </form>
      <form action="{{ url_for('end_game', game_id=game_id) }}" method="get">
        <input type="submit" name="end" value="End game" class="btn btn-danger"></input>
      </form>
    </div>
  </div>

看起来像是

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

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

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

在我的表单中,如何使游戏id对应于游戏id中的游戏id

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

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


共有2个答案

左丘子平
2023-03-14

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

在您的服务器中。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'))

超文本标记语言:

<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>
羿经武
2023-03-14

您正在尝试根据用户输入生成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'))
<form method="POST" action="{{ url_for('manage_game') }}">
    <input type="text" name="game_id"/>
    <input type="submit" name="action" value="Start"/>
    <input type="submit" name="action" value="Stop"/>
</form>

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

 类似资料:
  • 问题内容: 我正在尝试创建一个基本菜单,以检查输入的变量是否与定义的变量匹配。如果定义了变量,则获取已定义变量的数据。 例。 我输入 应该相等 问题答案: 这似乎是您要找的东西: 但是,这可能不是最好的策略,因为错字或恶意用户很容易使您的代码崩溃,系统过载或执行他们喜欢的任何其他讨厌的事情。对于这种特殊情况,更好的方法可能是

  • 我有两个表,一个是user,它是父表,另一个是posts(child)表,它的coulmns是 我已经说明了

  • 我想访问嵌入形式的过程变量,但我无法这样做。我在https://docs.camunda.org/manual/7.8/reference/embedded-forms/javascript/examples/浏览了留档以及https://github.com/camunda/camunda-bpm-examples/tree/master/usertask/task-form-embedded-

  • 我正在构建一个数据产品(一个NLP聊天应用程序),我正在学习它,以便用户可以有更好的UI与我的产品交互。 我在Flask中写下了以下代码,以获取用户输入并将其存储在变量中。 主要的派克 初始化。html 我已经处理了表单数据,并将其存储在变量中。我想把这个变量传递给另一个Python脚本,其中包含我的训练模型的代码。 doc2vec_main。派克 我的问题是我找不到连接doc2vec_main的

  • 我有一个带有多个输入标记的简单HTML表单。在页面加载时,我向表单提供数据,以从数据库回显字段的当前值,然后用户可以修改这些值并再次提交以执行更新。 代码运行良好,只是它不显示完整的变量。 例如,如果$namember='Saurabh Pradhan'than'而不是将'Saurabh Pradhan'显示为输入标记的值,则只显示'Saurabh'。 如果我从数据中删除空格并将其设置为“Saur