我正在(使用 Flask、Python、Jinja2)中编写注册用户函数,我正在检查用户名(或电子邮件)是否已经存在,如果存在则在 TextField 下方显示错误。
注册码是:
@app.route('/register', methods=['GET', 'POST'])
def register():
form = SignupForm()
error = None
if form.validate_on_submit():
user_by_name = Users.query.filter_by(username=form.username.data).first()
user_by_email = Users.query.filter_by(email=form.email.data).first()
if user_by_name:
error = 'Username already taken. Choose another'
return render_template('register.html', form=form, error = error)
elif user_by_email:
error = 'Email already registered. Login or register with another Email'
return render_template('register.html', form=form, error = error)
else:
#Add user details to DB logic
return redirect(url_for('index'))
return render_template('register.html', form=form, error = error)
我在文件中定义了一个宏util.html
{% macro render_field(field) %}
<div class="control-group {% if field.errors %}error{% endif %}">
{% if kwargs.get('label', True) %}
{{ field.label(class="control-label") }}
{% endif %}
<div class="controls">
{{ field(**kwargs) }}
{% for error in field.errors %}
<p class="help-block">{{ error }}</p>
{% endfor %}
</div>
</div>
{% endmacro %}
并将此宏用作register.html
:
{% from "util.html" import render_field %}
{% extends "base.html" %}
{% block content %}
<form method="post">
{{ form.hidden_tag() }}
{{ render_field(form.username, label=True, class="input-xlarge", autofocus="autofocus", errors=error) }}
{{ render_field(form.password, label=True, class="input-xlarge", autofocus="autofocus") }}
{{ render_field(form.confirm, label=True, class="input-xlarge", autofocus="autofocus") }}
{{ render_field(form.email, label=True, class="input-xlarge", autofocus="autofocus", errors=error) }}
<button class="btn" type="submit">Register</button>
</form>
{% endblock %}
现在,当我localhost:5000/register
使用重复的用户名或电子邮件地址测试它时,它根本不会显示任何错误(也不会将任何用户添加到数据库中,这没关系)。但是当我输入任何错误的电子邮件或将任何字段留空时,它会显示相应error
的,但不会显示error
我想使用register
视图传递的内容。
是否缺少任何与 Jinja2 相关的逻辑?
以及为什么它的显示errors
与空白字段或错误有关,email
但与我尝试传递的重复项无关username
。
请建议。