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. document.getElementById的简便方式

    封装自己的元素获取方法,使元素获取变得简便 注意:1.应该要防止定义的被重写,可将同名的重新定义   2.可将封装的对象置为全局对象,方便使用 通过id查找单个元素 封装方式: //通过id查找单个元 ...

  2. Delphi WebService连接数据库

    1. 图如下: 个人测试  客户端 1. 2.

  3. HDOJ(HDU) 2143 box(简单的多次判断-用的卫条件)

    Problem Description One day, winnie received a box and a letter. In the letter, there are three inte ...

  4. 芭比娃娃 Barbara

    芭比娃娃(芭比)是20世纪最广为人知及最畅销的玩偶,由Ruth Handler发明,于1959年3月9日举办的美国国际玩具展览会(American International Toy Fair)上首次 ...

  5. 优化SQL

    1. 通过 show status和应用特点了解各种 SQL的执行频率 通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extende d-status 命令获 ...

  6. idea unknow facet type web 解决方案

    菜单 -->Preferences-->Plugins 添加tomcat支持 如图: 然后 项目project-setting中 可以添加 web类型的facets了 pasting

  7. iOS开发之监测网络状态

    一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户 ...

  8. HDU 2066-一个人的旅行(最短路Dijkstra)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  9. ping and traceroute(tracert)

    1.ping程序简单介绍 这个程序是Mike Muuss编写的.目的是測试另外一台机子是否可达. 运用的协议就是ICMP.运用的是ICMP的回显应答和请求回显两个类型.曾经呢.能ping通说明可以进行 ...

  10. ios中框架介绍

    ios中框架介绍 参考博客: 参考文章:框架介绍 框架介绍 框架就是一个目录,一个目录包含了共享库,访问共享库里面的代码的头文件,和其他的图片和声音的资源文件.一个共享库定义的方法和函数可以被应用程序 ...