那些年我们学Flask-login,踩过史上最大的坑
那些年我们学Flask-login,踩过史上最大的坑
Flask-Loging 可以方便的管理用户会话,保护路由只让认证用户访问
http://flask-login.readthedocs.org/en/latest/
注意:我这里使用的是models使用的是sqlachemy,和flask-sqlachemy的查询语法还有稍微有些区别
一.初始化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有如下两种方法
在用户模型中实现 is_authenticated()方法 返回用户是否登陆
is_active()方法 返回是否允许该用户登陆,返回false该用户将不能登陆
is_anonymous()方法 返回是否是匿名用户, 也就是未登陆的用户等
get_id() 返回可以唯一标识用户的Unicode字符串注意:这个是在UserMinx里面
直接让用户模型继承 flask.ext.login.UserMixin类,类中有上面4个方法的默认实现 如:
flask-sqlachemy和sqlchemy这里都一样:
from flask.ext.login import UserMixinclass 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.
此外如果需要定制数据库的nid时,可在上方添加:
def get_id(self): return self.nid
默认情况下是查看id的:如果数据库的user表的主键为id,则可不定制get_id()
flask-sqlachemy的语法如下:
from . import loginManager @loginManager.user_loaderdef load_user(user_id): return User.query.get(int(user_id))
sqlachemy语法如下:
from . import loginManager #conn为连接数据库返回的session() @loginManager.user_loaderdef load_user(user_id): return conn.query(Users).filter_by(id = id).first()
(3)如果需要让页面只可又认证用户访问,可使用login_required装饰路由函数,未登陆的请求将会跳转到上面loginManager.login_view设置的登陆页面路由 如:
from flask.ext.login import login_required @app.route('/index') @login_requireddef index(): return "只有登陆用户能看到我"
(4)登陆登出用户 使用如下代码:
from flask.ext.login import login_user, logout_user #获取要登陆的用户对象 user = User.query.filter_by(user_name=username).first() #sqlachemy的查询语法 #user = conn.query(Users).filter_by(user_name=username,password=password).first() #第一个参数传入用户对象,第二个参数 传入 以后是否自动登陆 login_user(user,True) #登出logout_user()
注意:如上查询的是flask-sqlachemy的语法,与sqlachemy查询语句略微不同
(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 %}
这里注意:is_authenticated()加上()会报错,current_user.name的name是users表的nam
e
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
详解LAMP源码编译安装
实战:LAMP源码编译安装 家住海边喜欢浪:zhang789.blog.51cto.com 目录 详解LAMP源码编译安装 LAMP简介 一、准备工作 二、编译安装 Apache 三、编译安装 MySQL 四、编译安装 PHP 测试LAMP搭建开源数据web管理程序phpMyadmin 详解LAMP源码编译安装 LAMP简介 LAMP是当下非常流行的一套Web架构,我们可以在GNU/Linux下通过其他人打包的程序包来进行安装; 但是在生产环境中,很多时候都需要我们自己定制安装AMP,编译安装LAMP有以下几个优点 根据生产环境灵活定制程序优化编译参数,提高性能解决不必要的软件依赖 一、准备工作 卸载yum或rpm安装的amp软件 1、在编译安装lamp之前,首先先卸载已存在的rpm包。 [root@localhost ~]# yum -y remove httpd[root@localhost ~]# yum -y remove mysql-server mysql[root@localhost ~]# yum -y remove php[root@localhost ~]# yu...
- 下一篇
zabbix自定义脚本实现短信报警提醒
一 简介 通常,在zabbix的web界面配置好之后为了能够及时收到zabbix的报警信息,我们需要配置“报警媒介”来通知我们。其中常用的两种报警媒介分别是:Email和SMS,即:发邮件通知和发短信通知 关于邮件通知的配置很简单,只需要设置SMTP即可,因此这里不多说。但是zabbix默认的短信通知可就有点坑了,“SMS”这种报警媒介要想发送短信是需要硬件支持的。与此同时,现在开发中为了方便一般都是将短信发送的操作封装成接口的形式的,当需要发短信时只需要调用该接口同时传入收件人、短信详情等信息就可以完成一条短信的发送了 因此,为了简化zabbix短信通知的成本,我们可以考虑让zabbix调用外部的脚本请求短信接口来实现短信发送的功能 实现思路: 使用一个短信接口写一个发短信的脚本 在web界面中创建一个触发器,当问题严重性在“一般严重”及以上时执行上面的脚本,从而触发短信报警 二 具体实现步骤 (1)添加两个脚本(PS:发送短信脚本,并且是在zabbix_server上添加): [root@nmp01scripts]#cd/usr/local/zabbix [root@nmp01sc...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境