Flask wtforms检查username是否已经存在/闪烁错误



我有一个基本的注册/登录构建按预期工作。我遇到的问题是,我不知道如何检查用户名是否已经在使用中,然后闪烁一个消息,这样说。

我的路线

@app.route("/signup", methods=['GET', 'POST'])
def signup():
form = RegisterForm()
if form.validate_on_submit():
hashed_password = generate_password_hash(form.password.data, method='sha256')
new_user = User(username=form.userName.data, email=form.email.data, password=hashed_password)
db.session.add(new_user)
db.session.commit()
flash("Registration successful...please log in!")
return redirect(url_for('login'))
return render_template("signup.html", form=form)

My User Model

class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True)
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(80))

my HTML (errorsdiv)

{% for field, errors in form.errors.items() %}
<div class="alert alert-error">
{{ form[field].label }}: {{ ', '.join(errors) }}
</div>
{% endfor %}

一种可能性是编写一个自定义验证器,该验证器查询数据库中已经存在的具有该名称的用户,如果查询成功则抛出错误。

from flask_wtf import FlaskForm
from wtforms.validators import DataRequired
from wtforms.validators import ValidationError
class RegisterForm(FlaskForm):

# ...

username = StringField(
'Username',
validators=[
DataRequired(),
# ...
])
# ...

def validate_username(self, field):
if User.query.filter_by(username=field.data).first():
raise ValidationError('Username already in use.')

相关内容

最新更新