flask-web开发-用户认证代码分析(四)
来源:互联网 发布:wow数据库 编辑:程序博客网 时间:2024/05/19 00:36
理一下前几篇博文的思路.首先访问一个网页,进入的是首页,代码中是main.index一个简单的欢迎页面.这个页面需要forms.py表单并且渲染html,页面上可以跳转到注册和登录页面,那么就需views.py来提供跳转路径.假设我们已经注册,或者说数据库中已经有很多用户数据,那么对数据的调用,存储和修改都在modles.py.当用户登录时,views.py调用数据库中的用户信息来验证用户和密码是否正确,并给出跳转的首页或者再次回到登录页面,其中涉及了密码散列值加密的验证.接下里这里简单补充一下,用户登出的代码.主要谈一下用户注册,以及用户资料修改的内容.
用户退出登录,必然在首页要有一个logout的链接,点击后可以删除当前的登录状态,重新设置用户会话,并且无登录跳转到首页.以它为例,说说这种链接怎么实现的.首先在首页html文件中写入跳转链接,这里链接到auth.logout函数,蓝本中必须加的上层文件夹名作为前缀.具体函数在app/auth/views.py中.
from flask.ext.login import logout_user, login_required@auth.route('/logout') #定义路由@login_required #只有在登录的前提下才能用logout这个路由函数def logout(): logout_user() #flask-login中的logout_user()函数,可以删除并重设用户会话 flash('You have been logged out.')#显示一行信息 return redirect(url_for('main.index'))#重定向到主页或者叫首页
之前都是假定用户数据已经在数据库了,现在添加新用户,那就要注册表单,渲染,数据库查询判断用户名是否可用,存储新用户的相关数据,邮件验证等代码.validators是扩展中的一个验证函数,它常用的参数有 Required, Length, Email, Regexp, EqualTo,分别是要求不能为空,长度限制,邮箱格式限制,正则表达,相等.但这个函数在提交表单时才生效验证,也会带来不必要的麻烦.比如说你所有的注册信息都写过了,提交时告诉你用户名已被注册,然后
from flask.ext.wtf import Formfrom wtforms import StringField, PasswordField, BooleanField, SubmitFieldfrom wtforms.validators import Required, Length, Email, Regexp, EqualTofrom wtforms import ValidationErrorfrom ..models import Userclass 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')]) password = PasswordField('Password', validators=[ Required(), EqualTo('password2', message='Passwords must match.')]) 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.')#如果输入的email和username,与数据库中的相同那么则抛出已被注册的错误.
表单好了,那么需要模板渲染表单了,这样在跳转到注册页面才能很好的显示.渲染模板依然用wtf.quick_form(),里面的参数就是要渲染的表单.
auth/register.html
{% 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 %}
按照习惯一般是在登陆界面进行跳转,再次把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><div class="col-md-4"> {{ wtf.quick_form(form) }} <p>Forgot your password? <a href="{{ url_for('auth.password_reset_request') }}">Click here to reset it</a>.</p> <p>New user? <a href="{{ url_for('auth.register') }}">Click here to register</a>.</p></div>{% endblock %}
可以看到最后一句url_for地址为注册页面,点击链接发出Get请求后,就会跳转到注册页面.上面还有一句是密码重置的链接,一起放在登陆界面允许用户点击跳转.
- flask-web开发-用户认证代码分析(四)
- flask web开发-用户认证代码分析(三)
- Flask Web开发-用户认证部分代码分析(一)
- flask web开发-用户认证部分代码分析(二)
- flask web开发-用户验证代码分析(五)
- Flask Web 开发 用户认证
- Flask Web 开发 用户认证_2
- Flask Web 开发 用户认证_3
- Flask Web 开发 用户认证_4
- Flask Web 开发 用户认证_5
- Flask Web 开发 用户认证_6
- 《flask web开发》第八章 用户认证
- flask-用户认证(上)
- flask-用户认证(下)
- [python3.6 flask web学习]Flask用户认证框架
- Flask Web 开发 用户角色
- Flask Web 开发 用户资料
- Flask Web 开发 用户评论
- ssm框架搭建(主要配置步骤)
- 网站开发流程,个人心得,欢迎补充
- 【NOIP2017提高A组集训10.25】摘Galo (树形dp)
- Spring Boot系列02-Spring Boot + JSP 整合进行网页开发
- 初识网站安全
- flask-web开发-用户认证代码分析(四)
- 反射
- 互联网协议入门(一)
- 数字图像处理(第三版)—bmp图像的格式
- 大概整理下升级到Android Studio3.0遇到的问题
- linux centos7下QT5添加log4cplus库开发
- [线段树] HDU 3306
- 醒题
- URI与URL、URN笔记