【问题标题】:werkzeug.routing.BuildError with Flask Pythonwerkzeug.routing.BuildError 与 Flask Python
【发布时间】:2015-05-28 08:47:31
【问题描述】:

**与建议的重复不同,我的错误源于原始代码session['message']=request.form['message'] 中缺少以下行,而建议的重复中缺少render_template 组件`

我正在尝试使用 Flask 创建用户会话,我不关心身份验证。我只想要一个他们输入姓名的页面,然后将他们重定向到主页。我尝试按照this link here 中的示例进行操作,但我得到了werkzeug.routing.BuildError。总结一下我的python应用是:

from flask import Flask, render_template
from flask import request, session, url_for,abort,redirect

app = Flask(__name__)
app.config['SECRET_KEY'] = 'F34TF$($e34D';

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

@app.route('/signup', methods=['POST'])
def signup():
    session['username'] = request.form['username']
    session['message']=request.form['message']
    return redirect(url_for('message'))

@app.route("/message")
def message():
    return render_template("message.html")

if __name__ == '__main__':
    app.run(debug=True)

index.html 是:

{% extends "layout.html" %}
{% block content %}
    <h1>Say something</h1>
    <form method="post" action="{{ url_for('signup') }}">
        <p><label>Username:</label> <input type="text" name="username"    required></p>
        <p><button type="submit">Send</button></p>
    </form>
{% endblock %}

layout.html 是:

<!doctype html>
<html lang="en">
    <head>
        <title>Say somthing</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
       <link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
    </head>
    <body>
        {% block content %}{% endblock %}
    </body>
</html>

【问题讨论】:

  • **与建议重复的差异,我的错误源于原始代码会话中缺少以下行 ['message']=request.form['message'] 而在建议的重复中是缺少 render_template 组件`
  • 这是一个简单的用户错误,对本网站没有多大贡献。将其标记为重复也会将其链接到另一个类似的问题。

标签: python flask


【解决方案1】:

您收到该错误是因为您没有名为 message 的路由,但您正在重定向到它。

@app.route('/signup', methods=['POST'])
def signup():
session['username'] = request.form['username']
# Create a message route first
return redirect(url_for('message'))

这是一个名为 message 的示例路由

@app.route("/message")
def message():
    return render_template("message.html")

【讨论】:

  • 谢谢。我将session['message'] = request.form['message'] 添加到#create a message route first,现在收到The browser (or proxy) sent a request that this server could not understand. 错误
  • 请使用更新后的代码编辑您的帖子。您是否创建了一条名为 message 的路由?
  • 你为什么在你的注册路径中写 session['message']=request.form['message'] ?您甚至没有接收消息的表单域。查看您的 index.html 页面,有一个表单字段仅用于用户名,而不是消息。
  • 啊,宾果游戏,我忘记添加那行了!谢谢!
  • 不知何故我没有复制index.html 文件中的&lt;p&gt;&lt;label&gt;Message:&lt;/label&gt; &lt;textarea name="message"&gt;&lt;/textarea&gt;&lt;/p&gt; 部分。
猜你喜欢
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多