“werkzeug.routing.BuildError:无法为端点'成功'构建网址。您是否忘记指定值['name']?”
如何解决这个错误?我尝试过很多东西但是我自己也解决不了。
HTTP_methods.朋友:
from flask import Flask, redirect, url_for, request
app = Flask(__name__)
@app.route('/success/<name>')
def success(name):
return 'welcome %s' % name
@app.route('/login', methods=['POST', 'GET'])
def login():
if request.method == 'POST':
user = request.form['nm']
return redirect(url_for('success', name = user))
else:
user = request.args.get('nm')
return redirect(url_for('success', name = user))
if __name__ == "__main__":
app.run(debug=True)
我在登录方法中遇到错误,没有指定['name']的值;如何解决这个错误?
的login.html:
<!DOCTYPE html>
<html lang="en">
<body>
<form action="http://127.0.0.1:5000/login" method="POST">
<p>Enter name:</p>
<p><input type="text" name="nm" value="nm"/></p>
<p><input type="submit" value="submit"/></p>
</form>
</body>
</html>
输出:
File "/Users/chirag.kanzariya/pythonprojects/v_python/lib/python3.7/site-packages/flask/helpers.py", line 345, in url_for
force_external=external)
File "/Users/chirag.kanzariya/pythonprojects/v_python/lib/python3.7/site-packages/werkzeug/routing.py", line 1776, in build
raise BuildError(endpoint, values, method, self)
werkzeug.routing.BuildError: Could not build url for endpoint 'success'. Did you forget to specify values ['name']?
127.0.0.1 - - [29/Jan/2019 14:48:00] "GET /login?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 200 -
127.0.0.1 - - [29/Jan/2019 14:48:00] "GET /login?__debugger__=yes&cmd=resource&f=jquery.js HTTP/1.1" 200 -
127.0.0.1 - - [29/Jan/2019 14:48:00] "GET /login?__debugger__=yes&cmd=resource&f=debugger.js HTTP/1.1" 200 -
127.0.0.1 - - [29/Jan/2019 14:48:00] "GET /login?__debugger__=yes&cmd=resource&f=ubuntu.ttf HTTP/1.1" 200 -
127.0.0.1 - - [29/Jan/2019 14:48:00] "GET /login?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200 -
127.0.0.1 - - [29/Jan/2019 14:48:00] "GET /login?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200 -
我现在正在使用python 3.7和flask 1.0.2版本。
您需要在else部分(GET)中添加登录的html代码。
from flask import Flask, request, render_template, redirect, url_for
app = Flask(__name__)
@app.route('/success/<name>')
def success(name):
return 'welcome %s' % name
@app.route('/login',methods = ['POST', 'GET'])
def login():
if request.method == 'POST':
user = request.form['nm']
return redirect(url_for('success',name = user))
else:
return render_template('login.html')
if __name__ == '__main__':
app.run(debug = True)
看看这个。在您的登录功能中,我在打开登录页面时为第一个GET请求添加了一个render_template。这可能还可以防止您现在遇到的错误。请记住,这不包含任何错误处理,例如,如果用户在登录过程中未知,会发生什么。
@app.route('/success/<name>')
def success(name):
return 'welcome %s' % name
@app.route('/login', methods=['POST', 'GET'])
def login():
if request.method == 'POST':
user = request.form['nm']
return redirect(url_for('success', name = user))
return render_template(login.html)
if __name__ == "__main__":
app.run(debug=True)
您正在尝试直接访问登录。首先必须打开html页面。然后它访问该值。尝试此修复并首先打开html页面
@app.route('/login',methods=["POST","GET"])
def login():
if request.method=="POST":
user=request.form["nm"]
else:
user=request.args.get("nm")
if user:
return redirect(url_for('success', name = str(user)))
else:
return "go to the form"