【问题标题】:Flask forms not working烧瓶表格不起作用
【发布时间】:2017-07-02 11:32:12
【问题描述】:

我刚开始学习 Flask,作为一个练习项目,我想构建一个简单的网站,询问用户的姓名,并在新页面上以他们的名字打招呼。由于“错误请求”错误,我无法通过表单获取用户名并将其显示在新页面上。我的代码如下。

这是我的索引页,上面有表格:

<!DOCTYPE html>
<html>
<head>
    <title>Index</title>
</head>
<body>
    <h1>Practice index page</h1>
    <h2>Welcome to my practice web page.</h2>   

    <form action = "/firstname">
        <p>What's your name?</p>
        <input type = "text" name = "yourname"><br>
        <input type = "submit" value = "Submit">
    </form>
</body>
</html>

这是我的 application.py 文件:

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

@app.route('/')
def hello_world():
    return render_template('index.html')

@app.route('/firstname')
def first_name():
    yourname = request.form['yourname']
    return render_template('firstname.html', name = yourname)

这是我的 firstname.html 文件:

<!DOCTYPE html>
<head>
    <title>My name is</title>
</head>
<body>
    <h1>Hello</h1>
    <h2>Your name is {{name}}.</h2>
</body>

索引页面加载正常。当用户名被硬编码时,firstname.html 模板也可以正常加载,只有当我从表单中获取它时才会出现问题。

我已经在这里呆了几个小时,看了 YT 视频,疯狂地用 Google 搜索,但仍然无法找出问题所在,所以我非常感谢一些帮助!

【问题讨论】:

    标签: python html forms flask


    【解决方案1】:

    您需要将变量作为 dict 而不是直接传递。

    像这样

    @app.route('/firstname')
    def first_name():
        yourname = request.form['yourname']
        return render_template('firstname.html', **{"name": "yourname"})
    

    【讨论】:

    • 这相当于将yourname 作为关键字参数传递。
    【解决方案2】:

    默认情况下,Flask 路由只响应 GET 请求。您可以告诉 first_name 视图来回答 GET 和 POST 请求,如下所示:

    @app.route('/firstname', methods=['GET', 'POST'])
    def first_name():
        yourname = request.form['yourname']
        return render_template('firstname.html', name = yourname)
    

    您还需要将表单方法设置为 POST,以便 yourname 作为表单数据(在 request.form 中可读)而不是作为 URL 参数(在 request.args 中可读)发送。

    <form action = "/firstname" method="POST">
        <p>What's your name?</p>
        <input type = "text" name = "yourname"><br>
        <input type = "submit" value = "Submit">
    </form>
    

    【讨论】:

    • 我认为这可能是问题所在,但在方法中包含 POST 也不能解决问题。我仍然收到“错误请求”错误。老实说,在斗智斗勇:(
    • 这很奇怪。您是否还编辑了表单方法?如果在request.form 中找不到yourname,Flask 会引发错误请求。
    • 哦,我完全忘记改变表单方法了。现在似乎一切正常,谢谢!
    【解决方案3】:

    使用request.args['yourname'] 而不是request.form['yourname']

    您的 index.html 表单正在使用 get 方法和 name 参数作为查询字符串调用 /firstname url

    GET /firstname?yourname=Sunny HTTP/1.1
    

    所以您需要使用 request.args['yourname'] 而不是 request.form['yourname'] 访问查询参数

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 1970-01-01
      • 2020-07-24
      • 2022-01-09
      • 2016-09-02
      • 2017-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多