(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
重複したユーザー名または電子メールアドレスを使用してテストすると、エラーはまったく表示されません (DB にユーザーを追加することもありません)。しかし、間違った電子メールを入力したり、フィールドを空白のままにしたりすると、それぞれが表示されますが、ビューを使用して渡したいものerror
は表示されません。error
register
Jinja2 関連のロジックが欠落していませんか?
そして、なぜそれerrors
が空白のフィールドまたは間違ったものに関連して表示されているのに、重複などemail
を渡そうとしているのか.username
提案してください。