Flask Web 开发 用户认证_4

49 篇文章 2 订阅
41 篇文章 3 订阅

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

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

首先修改的是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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值