先加载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. [LC] 103. Binary Tree Zigzag Level Order Traversal

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

  2. C++ 中类的内存布局

    在许多笔试面试中都会涉及到sizeof 运算符的求值问题. 这类问题主要分四类: 基本数据类型,如int,bool,fload,long,long,int * 等,这一类比较简单,但要注意x86和x6 ...

  3. prototype与__proto__

    __proto__是每个对象都有的一个属性,而prototype是函数才会有的属性!!! 使用Object.getPrototypeOf()代替__proto__!!! 一.prototype 几乎所 ...

  4. Java的简易ATM系统

    大纲   ATM 机系统                   1.注册(账户(系统随机生成 15 位) - 密码(6位) - 余额)                   2.登录            ...

  5. 接口测试-chap4-关联接口测试

    关联接口测试指:请求第2个接口之前必须先请求第一个接口 1.请求第2个接口时需要带着第一个请求返回的cookie 2.如果不使用cookie,如何进行关联接口测试:使用session保持连接.可以代替 ...

  6. 写了个通作的分页存储过程,top,加入了排序

    USE [WebDB_TradeOrder]GO/****** Object:  StoredProcedure [dbo].[Boss_Proc_PagingWithOrder]    Script ...

  7. java增强型for循环

    http://blog.csdn.net/itmyhome1990/article/details/8797005

  8. linux服务器项目部署

    重启服务器 :reboot C:\Users\maple>mysql -u root -pEnter password: ******mysql> use test;Database ch ...

  9. VisualStudioCode通过SSH远程编辑文件

    翻译修改自:https://codepen.io/ginfuru/post/remote-editing-files-with-ssh 在远程服务器上编写文件是一件很糟糕的事情,vim和其他终端编辑器 ...

  10. 苹果又要召回iPhone 7!这到底是要闹哪样?

    7!这到底是要闹哪样?" title="苹果又要召回iPhone 7!这到底是要闹哪样?"> 现在的苹果虽然刚刚收获了史上最赚钱的一个季度--营收和利润均创下史上最 ...