flask 对于用户登录保持状态 flask_login
先加载flask_login
ext.py 在app下的__init__.py 进行引用把,我就不写了
login_manager = LoginManager()
# 如果没有登录则重定向到该蓝图的视图函数
login_manager.login_view = "user.login"
# 对登录用户进行监视,最高等级
login_manager.session_protection = "strong" def inin_ext(app): login_manager.init_app(app)
然后在数据库用户User模型中除了继承自sqlalhemy之外还继承 flask_login的 UserMixin
modles.py
'''
模型类需要继承flask_login UserMixin ,不然需要重写四个方法
is_active
get_id is_authenticated 登录用户
is_anonymous 未登录用户
只需需要理会这两个方法就行
''' class User(db.Model,UserMixin):
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
nicheng = db.Column(db.String(20))
email = db.Column(db.String(20))
password_hash = db.Column(db.String(200)) # 以下都是关于密码加密解密
@property
def password(self):
raise AttributeError('没有权限查看密码!') @password.setter
def password(self,password):
self.password_hash = generate_password_hash(password) def check_password(self,password):
return check_password_hash(self.password_hash,password)
继续在该模型文件中添加 用来获取传递过来的实例
# flask_login的实例 + user_loader 获取在视图函数views.py中login_user传递过来的参数 得到该实例
@login_manager.user_loader
def load_user(id):
return User.query.get(int(id))
views.py
@user.route('/login/',methods=['GET','POST'])
def login():
form = loginForm()
if form.validate_on_submit():
email = form.email.data
password = form.password.data
# 每一偶在表单中验证密码了,直接在这里验证是否为True
user = User.query.filter_by(email=email).first()
if user is not None and user.check_password(password):
# 传入该登录用户的User对象,在modles.py中回调函数会对传入的对象 存入session
login_user(user,remember=True)
return redirect(url_for('user.index'))
return redirect(url_for('user.login'))
form.password.data = ''
return render_template('login.html',form=form)
# 用户退出
@user.route('/logout')
def logout():
logout_user()
return redirect(url_for("user.index"))
其实只需要记住 在模型中继承flask_login UserMixin 并在模型外添加一个获取用户实例的函数
@login_manager.user_loader
def load_user(id):
return User.query.get(int(id))
在进行登录时 将登录用户在数据库中查询得到的实例传递过去
login_user(user,remember=True) # user 是登录用户实例
退出登录则使用
logout_user()
保护识图不被未登录用户访问
在每个识图装饰器下添加
@蓝图.route('/xxxx/')
@login_required
def xxxx():
xxxx
retrue 'xxxx'
login_manager.login_view = "user.login" # 该配置会将未登录用户重定向到该识图函数中
其中flask 自带一个 current_app 作为代理对不能导入app实例 进行一个替代 (导入死循环)
flask_login 也带有一个 current_user 可以对当前登录用户进行一个操作,比如数据库模型有id name ,可以对其操作 current_user.name 得到该实例的数据
特别是在jijia2 模板中操作
{% if not current_user.is_authenticated %}
<li><a href="{{ url_for("user.login") }}">登录</a></li>
<li><a href="{{ url_for("user.register") }}">注册</a></li>
{% endif %}
{% if current_user.is_authenticated %}
<li><a href="{{ url_for("user.index") }}">{{ current_user.nicheng }}</a></li>
<li><a href="{{ url_for('user.logout') }}">退出</a></li>
{% endif %}
通过 current_user.is_authenticated 对用户登录状态进行一个确定是否为登录用户 current_user.nicheng 显示出该实例用户的昵称
在登录视图函数中添加session的过期时间,不能再配置文件中填写,要在登录时进行书写
login_user(user)
# 设置session过期时间 过期时间一天
session.permanent = True
app = current_app._get_current_object()
app.permanent_session_lifetime = timedelta(days=1)
详细请看 https://www.cnblogs.com/practice-h/p/8883487.html
flask 对于用户登录保持状态 flask_login的更多相关文章
- flask 开发用户登录注册功能
flask 开发用户登录注册功能 flask开发过程议案需要四个模块:html页面模板.form表单.db数据库操作.app视图函数 1.主程序 # app.py # Auther: hhh5460 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- Flask 教程 第五章:用户登录
本文翻译自The Flask Mega-Tutorial Part V: User Logins 这是Flask Mega-Tutorial系列的第五部分,我将告诉你如何创建一个用户登录子系统. 你在 ...
- Flask最强攻略 - 跟DragonFire学Flask - 第五篇 做一个用户登录之后查看学员信息的小例子
需求: 1. 用户名: oldboy 密码: oldboy123 2. 用户登录成功之后跳转到列表页面 3. 失败有消息提示,重新登录 4.点击学生名称之后,可以看到学生的详细信息 后端: from ...
- python 全栈开发,Day119(Flask初识,Render Redirect HttpResponse,request,模板语言 Jinja2,用户登录例子,内置Session)
一.Flask初识 首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 三大主流Web框架对比 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
随机推荐
- E. Tree Painting(树形换根dp)
http://codeforces.com/contest/1187/problem/E 分析:问得分最高,实际上就是问以哪个节点出发得到的分数最多,而呈现成代码形式就变成了换根,max其得分!!!而 ...
- python、anaconda、jupyter notebook、pycharm、spyder
说明: 1.anaconda把任何东西都当做包来管理. 2.anaconda本省集成了python和conda.spyder.numpy等. 3.pip只用于python,conda可用于多种语言. ...
- golang kafka clinet 内存泄露问题处理
go 内存泄露 新版本服务跑上一天内存占用20g,显然是内存泄露 内存泄露的问题难在定位 技术上的定位 主要靠 pprof 生成统计文件 之前写web项目 基于net/http/pprof 可以看到运 ...
- 基于Python的Flask基础知识
Flask简介 Flask 是一个使用 Python 编写的轻量级 Web 应用程序框架.Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask. 下面我们简单 ...
- springboot学习笔记:10.springboot+atomikos+mysql+mybatis+druid+分布式事务
前言 上一篇文章我们整合了springboot+druid+mybatis+mysql+多数据源: 本篇文章大家主要跟随你们涛兄在上一届基础上配置一下多数据源情况下的分布式事务: 首先,到底啥是分布式 ...
- Java中的注意点
1.源文件以.java结束,源文件的基本组成部分是类(class) 2.每个源文件只能有一个public类,源文件名必须和该类的类名一致 3.每个Java程序的执行入口都是main()方法,固定写法为 ...
- SpringMVC静态资源拦截的问题
通常在web.xml中的核心控制器的DispatcherServlet中的url-pattern属性配置成类似“/”的拦截路径,但是会出现静态资源找不到的问题,比如js脚本.图片.css等无法加载,那 ...
- 深入JVM内核--JVM运行机制
JVM启动流程 JVM基本结构 PC寄存器 每个线程拥有一个PC寄存器 在线程创建时 创建 指向下一条指令的地址 执行本地方法时,PC的值为undefined 方法区 保存装载的类信息 类型的常量池 ...
- 剖析String,StringBuffer,StringBuilder异同
近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便 ...
- vyos的Xvlan配置方式
set interfaces bridge br0 address '172.12.12.10/24' //开启一个桥借口,用于xvlan的通信 set interfaces vxlan vxlan0 ...