本文共 2875 字,大约阅读时间需要 9 分钟。
——————————————————————前言————————————————————————————
本节讲解如何为我们的web程序添加注册新用户的功能。
————————————————————————————————————————————————————
from flask_wtf import FlaskFormfrom wtforms import StringField, PasswordField, SubmitField, ValidationErrorfrom wtforms.validators import DataRequired, Length, Email, Regexp, EqualTofrom ..models import Userclass RegisterForm(FlaskForm): #注册表单 email = StringField('Email', validators=[ DataRequired(), Length(1, 64), Email() ]) username = StringField('Username', validators=[ DataRequired(), Length(1, 64), Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0, 'Username must hava only letters, numbers, dots or underscores.') ]) password = PasswordField('Password', validators=[ DataRequired(), EqualTo('password2', 'Password must match.') ]) password2 = PasswordField('Confirm Password', validators=[ DataRequired() ]) submit = SubmitField('register') def validate_email(self, field): if User.query.filter_by(email=field.data).first() is not None: raise ValidationError('Email already registered.') def validate_username(self, field): if User.query.filter_by(username=field.data).first() is not None: raise ValidationError('Username already Register.')注释:
验证函数:
Regexp:
该字段填写的字符串必须符合第一个参数给定的正则表达式——字母开头, 后面可以是字母数字下划线和点号。
第二个参数是正则表达式的旗标, 不太懂, 也没搜到,默认为0就好了
第三个参数是提醒字符串, 如果该字段的填写值不符合给定的正则表达式, 就会发送提醒。
EqualTo:
因为两次填写的密码必须相同, 所以我们在其中任意一个密码字段中设置该验证函数, 其第一个参数是另一个密码字段的名称, 第二个参数是提醒字符串, 如果两次填写密码不同, 发出提醒。
自定义验证函数:
我们在该脚本定义了两个自定义的验证函数, 自定义验证函数都以validate_开头, 后面紧跟字段名称, 效果跟validators参数中的验证函数一样。
validate_email:
我们为email字段添加了一个验证函数, 如果数据库已经存在该email, 则向用户发出提醒;
validate_username:
同上。
我们只要添加一个视图函数用来返回注册表单即可:
@auth.route('/register', methods=['GET', 'POST'])def register(): form = RegisterForm() #创建表单 if form.validate_on_submit(): #填写的表单数据通过验证函数 u = User(email=form.email.data, username=form.username.data, password=form.password.data) #创建用户 db.session.commit(u) #把用户添加到会话 flash('You can now login.') #提示用户已经可以登录 return redirect(url_for('auth.login')) #重定向 return render_template('auth/register.html', form=form)
{% extends 'base.html' %}{% import 'bootstrap/wtf.html' as wtf %}{% block title %}Flasky - Login{% endblock %}{% block page_content %}Login
{ { wtf.quick_form(form) }}{% endblock %}
#在登录表单下面添加注册页面的链接, 点击以后跳转到注册页面
{% extends 'base.html' %}{% import 'bootstrap/wtf.html' as wtf %}{% block title %}Flasky - Register{% endblock %}{% block page_content %}{ { wtf.quick_form(form) }}{% endblock %}Register
登陆成功!