我正在尝试检查数据库中是否已存在用户名,然后注册新用户。但是无论我输入的用户名是否已注册,它都将使用URL中的register.html
恢复为?username=xxx&password=xxx
。我该如何解决?
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
reg_username = request.form.get['username']
reg_password = request.form.get['password']
# Check if username exists in database
query = "SELECT username FROM users WHERE username = :username"
if db.execute(query, {'username': reg_username}).first():
flash('Username already exists')
return render_template('register.html')
else:
new_user = User(reg_username, reg_password)
db.session.add(new_user)
db.session.commit()
session['username']=reg_username
return redirect(url_for('login'))
return render_template('register.html')
答案 0 :(得分:0)
您的代码(if语句块)期望一个POST
请求,并且看起来您正在通过GET
发送一个?username=xxx&password=xxx
请求。将表单的方法更改为POST
。如果您未在HTML表单中指定方法,则默认情况下它将使用GET
。
另外,您还需要更正代码,因为Flask中的POST请求不使用request.form.get()
,而使用request.form['key_name']
将您的代码更改为以下内容,并确保将HTML模板中的表单方法更改为POST
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
reg_username = request.form['username']
reg_password = request.form['password']
# Check if username exists in database
query = "SELECT username FROM users WHERE username = :username"
if db.execute(query, {'username': reg_username}).first():
flash('Username already exists')
return render_template('register.html')
else:
new_user = User(reg_username, reg_password)
db.session.add(new_user)
db.session.commit()
session['username']=reg_username
return redirect(url_for('login'))
return render_template('register.html')
HTML表单外观的示例
<form action="{{url_for('register')}}" method="POST">
<!––some input-->
</form>