Python Flask学习_使用flask-login实现认证蓝本 (三)
在点击打开链接中讲了登录页面的实现。
这篇主要讲实现登录登出的路由和视图函数。
一个登录的URL,可以向服务器发出两种请求,一种是没有表单内容的GET请求,一种是附有 表单内容的POST请求。
因此,登录页面的视图函数也应当分成GET和POST两种情况,分别返回不同的页面 。
一、登入用户
# app/auth/views.py from flask import render_template,redirect,request,url_for,flash from flask_login import login_user,logout_user from . import auth from ..models import User from .forms import LoginForm @auth.route('/login',methods=['GET','POST']) def login(): form = LoginForm() if form.validate_on_submit(): user=User.query.filter_by(email=form.email.data).first() if user is not None and user.verify_password(form.password.data): login_user(user,form.remember_me.data) return redirect(request.args.get('next') or url_for('main.index')) flash('Invalid username or password') return render_template('auth/login.html',form=form)
auth是BluePrint类的实例。因此,路由装饰器前应当加上"auth."
form是LoginForm类的实例。
分为两种情况:
(1)如果有表单内容提交,即POST请求。
form.validate_on_submit()会返回True。并且form的各属性会有值。
User.query.filter_by(email=form.email.data):查询数据库User表有没有对应的email=form.email.data的,如果有则返回其实例,如果没有则返回None。
if user is not None and user.verify_password(form.password.data):user不为None(数据库有记录),同时调用密码验证正确。
login_user(user,form.remember_me.data):调用Flask-Login的login_user()函数,把用户标记为已登录。如果第二个参数(form.remember_me.data)为True,那么会在用户浏览器中写入一个长期有效的cookies,关闭浏览器再打开也是登录状态;为False,则直接关闭浏览器用户会话就过期,再访问需要重新登录。
return redirect(request.args.get('next') or url_for('main.index')):未登录状态下的用户访问未授权(需要登录)的URL,会显示登录表单,Flask-Login会把目标URL暂时存在request.args的'next'中,此时就重定向到目标URL中。如果'next'为None则 重定向到首页。
(2)没有 表单内容提交,即GET请求
form.validate_on_submit()会返回False。
return render_template('auth/login.html',form=form):form此时并没有赋值,通过没有赋值的form渲染模板。
二、登出用户
# app/auth/views.py from flask_login import login_user,logout_user from . import auth @auth.route('/logout') def logout(): logout_user() flash('You have been logged out') #flask消息 return redirect(url_for('main.index')) #重定向至main.index
调用Flask-Login中的logout_user()函数,则直接登出。
flash('You have been logged out') :显示一条flash消息
- Python Flasky学习_使用Flask_SQLAlchemy的asPagination类对象实现分页
- 使用python的Flask实现一个RESTful API服务器端[翻译]
- [Python][flask][flask-login]关于flask-login中各种API使用实例
- 使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
- Python FLask Web 学习笔记:jinjia2的使用方法1
- 【python学习笔记】使用类封装实现贪吃蛇
- 使用Python的Flask框架实现视频的流媒体传输
- python数据结构学习笔记-2016-10-28-02-使用链表实现稀疏矩阵
- 使用Python的Flask框架实现视频的流媒体传输
- 数据库(三)为Python shell添加新的功能和使用Flask-Migrate实现数据库迁移
- 转:使用python的Flask实现一个RESTful API服务器端
- Python使用htpasswd实现基本认证授权的例子
- python学习笔记之使用threading模块实现多线程(转)
- python 学习--使用filter来实现判断回文数
- 使用python的Flask实现一个RESTful API服务器端[翻译]
- Python的Flask框架应用程序实现使用QQ账号登录的方法
- 使用python的Flask实现一个RESTful API服务器端[翻译]
- 使用python的Flask实现一个RESTful API服务器端[翻译]使用python的Flask实现一个RESTful API服务器端[翻译]
- python数据结构学习笔记-2016-10-24-02-使用排序列表实现集合ADT
- 使用python的Flask实现一个RESTful API服务器端[翻译]