本文将详细讲解“一个基于flask的web应用诞生 用户注册功能开发(5)”的完整攻略,主要以代码示例的方式展示开发过程。
一、更新注册表单的模板
首先我们需要更新注册表单的模板,使其能够显示用户名和密码的错误信息。在templates/register.html
中,添加以下代码:
{% extends 'base.html' %}
{% block content %}
<h2>Register</h2>
<form method="POST">
{{ form.hidden_tag() }}
<p>
{{ form.username.label }} <br>
{{ form.username(size=32, autofocus=true) }} <br>
{% for error in form.username.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form.password.label }} <br>
{{ form.password(size=32) }} <br>
{% for error in form.password.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.submit() }}</p>
</form>
{% endblock %}
这个模板继承了base.html
,添加了一个注册表单。我们用form.hidden_tag()
添加了一个CSRF令牌,然后为每个字段创建一个标签和输入框。为了检查错误,我们使用了一个循环,遍历每个字段的错误信息,然后为其添加一个红色的错误提示。
二、更新用户注册功能视图
我们接下来需要更新用户注册功能的视图。在views.py
中,添加以下代码:
from .forms import RegisterForm
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegisterForm()
if form.validate_on_submit():
user = User(username=form.username.data, password=form.password.data)
db.session.add(user)
db.session.commit()
flash('Thanks for registering')
return redirect(url_for('index'))
return render_template('register.html', form=form)
这个视图函数使用RegisterForm
创建一个表单实例。如果表单通过验证,我们将创建一个用户实例,并将其添加到数据库中。然后我们使用flash
函数向用户显示一条成功注册的消息,并重定向到主页。
如果表单没有通过验证,我们将重定向到register.html
模板,将表单实例传递给它。
三、测试用户注册功能
我们现在已经完成了用户注册功能的开发。可以使用以下命令运行应用程序:
export FLASK_APP=hello.py
export FLASK_ENV=development
flask run
然后打开浏览器,访问http://localhost:5000/register
,即可看到注册表单。提交表单后,将创建一个新的用户并重定向到主页。
四、示例说明
1. 添加用户名和密码长度验证
我们可以使用Length
验证器来添加用户名和密码的长度验证,如下所示:
from wtforms.validators import DataRequired, Length
class RegisterForm(FlaskForm):
username = StringField('username', validators=[DataRequired(), Length(min=6, max=16)])
password = StringField('password', validators=[DataRequired(), Length(min=6, max=16)])
这个表单现在将对用户名和密码的长度进行验证。如果长度不在6到16之间,将抛出一个ValidationError
异常。
2. 添加电子邮件验证
我们可以使用Email
验证器来添加电子邮件验证,如下所示:
from wtforms.validators import DataRequired, Length, Email
class RegisterForm(FlaskForm):
email = StringField('email', validators=[DataRequired(), Email()])
这个表单现在将对电子邮件地址进行验证。如果它不符合电子邮件地址的格式,将抛出一个ValidationError
异常。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一个基于flask的web应用诞生 用户注册功能开发(5) - Python技术站