先加载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的更多相关文章

  1. flask 开发用户登录注册功能

    flask 开发用户登录注册功能 flask开发过程议案需要四个模块:html页面模板.form表单.db数据库操作.app视图函数 1.主程序 # app.py # Auther: hhh5460 ...

  2. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  3. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  4. Flask 教程 第五章:用户登录

    本文翻译自The Flask Mega-Tutorial Part V: User Logins 这是Flask Mega-Tutorial系列的第五部分,我将告诉你如何创建一个用户登录子系统. 你在 ...

  5. Flask最强攻略 - 跟DragonFire学Flask - 第五篇 做一个用户登录之后查看学员信息的小例子

    需求: 1. 用户名: oldboy 密码: oldboy123 2. 用户登录成功之后跳转到列表页面 3. 失败有消息提示,重新登录 4.点击学生名称之后,可以看到学生的详细信息 后端: from ...

  6. python 全栈开发,Day119(Flask初识,Render Redirect HttpResponse,request,模板语言 Jinja2,用户登录例子,内置Session)

    一.Flask初识 首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 三大主流Web框架对比 ...

  7. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  8. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  9. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

随机推荐

  1. Filezilla Server搭建FTP服务器

    一.下载Filezilla  Server 官网网址:https://filezilla-project.org 下载链接 :https://filezilla-project.org/downloa ...

  2. Spring+Mybais整合

    简单的来说,Spring主要用于在业务层(当然spring也有数据库交互的模块,个人觉得spring在这方面有一点不如mybatis),而mybatis主要用于数据持久化,在一个完整的项目中无论是业务 ...

  3. openpyxl传入表名时不要使用默认的sheet表名

    openpyxl传入表名时不要使用默认的sheet表名,会报错 处理:改一下表名即可

  4. spring xml 注入 map 时 map 标签报错

    如图所示: 在XML配置文件中并没有问题,问题出在实体类,在类中属性 maps 用 Map定义即可,用HashMap定义就会出现如上错误 K-I-N-G-D-O-M

  5. react全家桶从0搭建一个完整的react项目(react-router4、redux、redux-saga)

    react全家桶从0到1(最新) 本文从零开始,逐步讲解如何用react全家桶搭建一个完整的react项目.文中针对react.webpack.babel.react-route.redux.redu ...

  6. rsync参数详解

    Rsync的参数详细解释 -v, --verbose 详细模式输出-q, --quiet 精简输出模式-c, --checksum 打开校验开关,强制对文件传输进行校验-a, --archive 归档 ...

  7. 杂谈php之什么是cgi,fastcgi,fpm,cli,mod

    杂谈PHP极少关注的问题 本话题来自于我使用PHP进行网页爬虫的一次经历.对于一个web开发者来说,PHP解释器本身却知之甚小,实在是惭愧呐! 首先这个话题要从几个提问开始. PHP是什么? 外文名: ...

  8. Django ORM必会13条之外的查询方法

    基于双下划线的查询 # 价格 大于 小于 大于等于 小于等于 filter(price__gt=') # 筛选出大于90 filter(price__lt=') # 筛选出小于90 filter(pr ...

  9. 《ASP.NET Core 高性能系列》Span<T>和Memory<T>

    一.Span<T>概述 原文:Provides a type- and memory-safe representation of a contiguous region of arbit ...

  10. 连接器巨头Molex莫仕:替代品厂PK原厂

    序言:在中国电子产业,原厂PK替代品厂一直是一个极具话题性.美国在贸易战背景下,挤压中国的发展空间,迫使这一类企业要觉醒.当然受影响的不止中国电子企业,美国电子企业也一样. 在连接器这一领域,Mole ...