Flask-Loging 可以方便的管理用户会话,保护路由只让认证用户访问

http://flask-login.readthedocs.org/en/latest/

一.初始化Flask-Login

from flask.ext.login import loginManager

loginManager = LoginManager(app)
#如果需要延迟创建app 可使用
# loginManager = LoginManager()
# loginManager.init_app(app) loginManager.session_protection = "strong"
#可以设置None,'basic','strong' 以提供不同的安全等级,一般设置strong,如果发现异常会登出用户 loginManager.login_view = "login"
#这里填写你的登陆界面的路由

二.配置及使用Flask-Login

(1)使用flask-login有如下两种方法

  1. 在用户模型中实现 is_authenticated()方法 返回用户是否登陆
    is_active()方法  返回是否允许该用户登陆,返回false该用户将不能登陆
    is_anonymous()方法 返回是否是匿名用户, 也就是未登陆的用户等
    get_id() 返回可以唯一标识用户的Unicode字符串
  2. 直接让用户模型继承 flask.ext.login.UserMixin类,类中有上面4个方法的默认实现 如:
    from flask.ext.login import UserMixin
    
    class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64),unique=True)

    Flask-Login还提供了 flask.ext.login.AnonymousUserMixin类 继承至该类的用户模型 将作为未登陆时的用户模型,可以保持代码的一致性

(2)Flask-Login要求实现一个回调函数,使用 get_id()方法返回的唯一标识用户的Unicode字符串 作为参数 返回这个用户对象.

如果是继承的UserMixin类, get_id()方法默认返回的用户的id. 如果用户不存在,应该返回None.

from . import loginManager

@loginManager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))

(3)如果需要让页面只可又认证用户访问,可使用login_required装饰路由函数,未登陆的请求将会跳转到上面loginManager.login_view设置的登陆页面路由 如:

from flask.ext.login import login_required

@app.route('/index')
@login_required
def index():
return "只有登陆用户能看到我"

(4)登陆登出用户 使用如下代码:

from flask.ext.login import login_user, logout_user

#获取要登陆的用户对象
user = User.query.filter_by(username = 'skkg').first() #第一个参数传入用户对象,第二个参数 传入 以后是否自动登陆
login_user(user,True) #登出
logout_user

(5)获取当前登陆的用户,

from flask.ext.login import current_user

#判断当前用户是否是匿名用户
current_user.is_anonymous()

  也可以在模版中使用 {% if current_user.is_authenticated() %} 判断

(6)在模版中使用,如果用户已认证就显示他的名字

{% if current_user.is_authenticated() %}
Hi {{ current_user.name }}!
{% endif %}

  

Flask学习记录之Flask-Login的更多相关文章

  1. [ZHUAN]Flask学习记录之Flask-SQLAlchemy

    From: http://www.cnblogs.com/agmcs/p/4445583.html 各种查询方式:http://www.360doc.com/content/12/0608/11/93 ...

  2. Flask学习记录之Flask-Admin

    相信用过Django框架的都不会忘记它强大的Admin功能,Flask-admin是一款能够与Django Admin所媲美的扩展,能够快速创建Web管理界面,实现了用户.文件增删改查等常用功能:也可 ...

  3. Flask学习记录之Flask-WTF

    Flask-wtf时Wtforms库的flask框架扩展,能够方便的处理Web表单 一.定义一个web表单 使用flask-wtf时,每个web表单都由一个继承自flask.ext.wtf.Form的 ...

  4. Flask学习记录之Flask-SQLAlchemy

    Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令. Flask-Migrate ...

  5. Flask学习记录之MarkDown编辑文本

    为了让网页支持markdown编辑文本,使用如下了4个库 PageDown : 在前端提供一个可以实时将markdown内容转换成html文本进行效果预览的编辑器 Flask-PageDown: 这个 ...

  6. Flask学习记录之Flask-Migrate

    一.配置Flask-Migrate from flask.ext.migrate import Migrate, MigrateCommand migrate = Migrate(app,db) #第 ...

  7. Flask学习记录之Flask-Moment

    Moment.js 是一个简单易用的轻量级JavaScript日期处理类库,提供了日期格式化.日期解析等功能.它支持在浏览器和NodeJS两种环境中运行.此类库能够 将给定的任意日期转换成多种不同的格 ...

  8. Flask学习记录之Flask-Mail

    Flask-Mail可以连接到配置中的SMTP服务器,进行邮件发送,如果没有进行SMTP服务器的配置,将会默认连接到localhost上的 一.配置及初始化 (1)flask应用配置 #配置选项 MA ...

  9. Flask学习记录之使用Werkzeug散列密码

    数据库中直接存放明文密码是很危险的,Werkzeug库中的security能够方便的实现散列密码的计算 security库中 generate_password_hash(password,metho ...

随机推荐

  1. Nodejs in Visual Studio Code 11.前端工程优化

    1.开始 随着互联网技术的发展,企业应用里到处都是B/S设计,我有幸经历了很多项目有Asp.Net的,有Html/js的,有Silverlight的,有Flex的.很遗憾这些项目很少关注前端优化的问题 ...

  2. bzoj 3158 千钧一发(最小割)

    3158: 千钧一发 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 767  Solved: 290[Submit][Status][Discuss] ...

  3. ASIHttpRequest或者SDWebImage给UIImageView加载图片的逻辑是什么样子的

    非常非常喜欢SDWebImage,就算后来AF也做了图片缓存,我也还是一直使用.图片缓存真的是一件令人头疼的事,但是SDWebImage封装了一切,你所需要的只是简单的set一个URL:1.设置一个展 ...

  4. SpringBoot 配置文件 application.properties(二)

    mvc spring.mvc.async.request-timeout设定async请求的超时时间,以毫秒为单位,如果没有设置的话,以具体实现的超时时间为准,比如tomcat的servlet3的话是 ...

  5. Android源代码分析之Framework的MediaPlayer

    在Android中MediaPlayer用来播放音频和视频文件,在这里分析下在Framework层中MediaPlayer是怎样调用的.MediaPlayer的代码位于:./frameworks/ba ...

  6. 第一篇:R语言数据可视化概述(基于ggplot2)

    前言 ggplot2是R语言最为强大的作图软件包,强于其自成一派的数据可视化理念.当熟悉了ggplot2的基本套路后,数据可视化工作将变得非常轻松而有条理. 本文主要对ggplot2的可视化理念及开发 ...

  7. select poll epoll三者之间的比较

    一.概述 说到Linux下的IO复用,系统提供了三个系统调用,分别是select poll epoll.那么这三者之间有什么不同呢,什么时候使用三个之间的其中一个呢? 下面,我将从系统调用原型来分析其 ...

  8. java多态 -- 猫狗案列

    我们用猫狗案例来表明在java中使用多态的好处: class Animal{ public Animal(){} public void eat(){ System.out.println(" ...

  9. 修改tt模板让ADO.NET C# POCO Entity Generator With WCF Support 生成的实体类继承自定义基类

    折腾几天记载一下,由于项目实际需要,从edmx生成的实体类能自动继承自定义的基类,这个基类不是从edmx文件中添加的Entityobject. 利用ADO.NET C# POCO Entity Gen ...

  10. Pgsql 里面 COALESCE的用法

    有这种要求,更新自己本身的字段的某个值进行加或者减, 常规方法: UPDATE tbl_kintai_print_his SET print_time = now(), print_emp_cd = ...