Flask Web 开发 用户认证_4

来源:互联网 发布:企业发展优化措施 编辑:程序博客网 时间:2024/05/24 22:46

这个篇章内容比较多,继续上一篇章节

登录功能做完以后,终于可以来做新用户注册的功能了

首先修改的是auth/forms.py如下

from flask.ext.wtf import Form
from wtforms import StringField,PasswordField,BooleanField,SubmitField
from wtforms.validators import Required,Length,Email,Regexp,EqualTo                             #这2个是新功能,前者用于验证用户名的构成,后者用户验证密码重复性
from wtforms import ValidationError
from ..models import User

class RegistrationForm(Form):
 email = StringField('Email',validators=[Required(),Length(1,64),Email()])
 username = StringField('Username',validators=[Required(),Length(1,64),Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0,'Usernames must have only letters, ''numbers, dots or underscores')])               #Regexp确保username 字段只包含字母、数字、下划线和点号。这个验证函数中正则表达式后面的两个参数分别是正则表达式的旗标和验证失败时

                                       #显示的错误消息
 password = PasswordField('Password',validators=[Required(),EqualTo('password2',message='Passwords must match')])  #用于输入密码并和password2匹配
 password2 = PasswordField('Confirm password',validators=[Required()])  #重复输入密码的框
 submit = SubmitField('Register')
 
 def validate_email(self,field):                  
  if User.query.filter_by(email=field.data).first():
   raise ValidationError('Email already registered.')
 
 def validate_username(self,field):
  if User.query.filter_by(username=field.data).first():
   raise ValidationError('Username already in use.')


这里讲到一个概念,Form类里面有一个功能,凡是以validate_为开头的方法,都会在验证的时候被自动调用,这个概念后期自己看源代码吧


随后,将title和page_content里面的标题头改一下,就可以显示注册页面了

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Flasky - Register{% endblock %}
{% block page_content %}
<div class="page-header">
 <h1>Register</h1>
</div>

<div class='col-md-4'>
 {{ wtf.quick_form(form) }}
</div>
{% endblock %}


然后,如果访问的用户是未注册的用户呢?那一般我们在用户登录的页面上,都会看到提示新用户注册的链接,那我们在登录页面也要放一个链接

那就要在auth/login.html里面添加代码

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Flasky - Login{% endblock %}
{% block page_content %}
<div class="page-header">
 <h1>Login</h1>
</div>
<p>
New user?
<a href="{{ url_for('auth.register') }}">         #添加链接,地址是auth.register的反向路由,
Click here to register
</a>
</p>
<div class='col-md-4'>
 {{ wtf.quick_form(form) }}
</div>
{% endblock %}


看下面两张图,可以看到,如果我填的内容不符合form要求的话,会有提示信息出来,其实这些提示信息都是在Field内部设置的






然后,我们再测试下正确信息输入后的登陆页面,可以看到,登陆进去以后,欢迎页面已经可以显示你的名字了,数据库里也显示已经添加进去的内容












0 0