Flask-login

flask-login 源码解析 这篇文章介绍了 flask-login 是如何实现一个不需要使用数据库的用户认证组件的。 阅读详情

Flask-login提供用户session管理,它解决了用户登录,登出,在长时间内能记住你的用户的session。

用处:
- 储存已激活的用户ID到session中,方便用户登录和登出
- 对已登录用户或登出用户限制视图
- 提供“remember me”功能
- 帮助你防止你的session被cookie小偷盗掉
- 将认证扩展和Flask整合到一起

然而,它无法做到:

  • 不提供数据库或其他储存方法给你,你必须自己负责如何加载数据
  • 限制你使用用户名和密码,开放ID和其他认证方法
  • 处理登录用户和匿名用户的权限
  • 解决用户注册和找回

安装

pip install flask-login

配置

首先,使用flask-login的应用程序中最重要的部分就是要有Loginmanager类,你必须在你的应用程序中创建该类的实例

login_manager = LoginManager()

如果你已经创建了一个应用程序实例app,接下来,就是把它装进login_manager里,这样login manager才能够让你的应用app和Flask-login一起工作,比如,当用户需要登录的时候,login manager就会根据id来加载用户。

login_manager.init_app(app)

如何工作?

你需要提供一个user_loader回调函数,这个回调函数是用来从存储在session中的ID里加载用户对象,根据用户的unicode ID,返回用户对象

@login_manager.user_loader
def load_user(user_id):
    return User.get(user_id)

当然,如果ID无效的话,就返回None(不报异常)

User类

你的User类还得要实现下面4种方法

  1. is_authenticated()–如果用户已认证,则返回True。(只有认证用户才能使用login_required装饰器)
  2. is_active()–如果用户已激活,则返回True.除了认证,用户还需要激活他们的账户,确保他们不是僵尸。未激活账户将无法登陆(当然,这不是强制性的)
  3. is_anonymous()–如果用户是匿名游客,则返回True.(真实用户应该返回False)
  4. get_id()–这个方法会返回一个唯一的Unicode ID,被用来从回调函数load_user()中加载用户,记住这里必须是一个Unicode,如果ID是int或其他类型的话,需要将其转化为Unicode

为了更快捷地实现上面4种方法,我们可以让User类继承UserMixin

from flask_login import UserMixin

class User(UserMixin):

登录举例

如果有一位用户已经认证过了,你现在就可以使用login_user()来登录他

@app.route('/login', methods = ['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User(xxx)
        login_user(user)  #表登陆
        flash('login successfully')

        next = request.args.get('next')
        if not is_safe_url(next):
            return abort(400)
        return redirect(next or url_for('index'))
    return render_template('index.html', form = form)

注意:你必须要检验next的值,不这样做的话,你的应用程序将会很容易受到攻击

现在你可以在每个模板中使用current_user来表示已登录用户

{% if current_user.is_authenticated %}
    Hi {{current_user.username}}
{% endif %}

为了保证路由只被已认证的用户访问,flask-login提供了login_required装饰器

@app.route('/setting')
@login_required
def setting():
    pass

当用户选择登出时,

@app.route('logout')
@login_required
def logout():
    logout_user() # 表退出
    return redirect(somewhere)

定制登陆

默认情况下,当一个未登录用户试图访问一个login_required页面时,Flask-login会将页面跳转到登录界面,并且会发消息让你先登录。(如果你还没有设置你的登陆页面的话,就会abort一个401 error)

现在我们来设置登陆页面

login_manager.login_view = '蓝本名.login'

默认的消息是’Please log in to access this page’.当然,你也可以对消息进行定制

login_manager.login_message = u"xxxxxxxxxx"
Flask-Login 用户登录 Flask-Login提供Flask的用户会话管理。它处理登录,注销和记住用户会话的常见任务。 它会: 1.将活动用户的ID存储在会话中,让您轻松登录和注销。 2.让您将视图限制为已登录(或已注销)用户。 3.处理通常令人毛骨悚然的“记住我”功能。 4.帮助保护您的用户会话免遭Cookie小偷窃取。 5.稍后可能与Flask-Principal或其他授权扩展集成。 但是,它不会: 1.对您强加特定... 阅读详情

相关推荐

基于C#的机器人控制框架:如何将ROS与硬件集成

本文探讨了如何利用C#与ROS(Robot Operating System)集成开发机器人控制系统。通过ROSSharp库和rosbridge中间件,实现了C#与ROS的WebSocket通信,并展示了硬件控制模块的设计方法。文章详细介绍了电机控制的串口通信实现、ROS消息订阅机制,以及性能优化和容错处理策略,最终构建了一个智能小车控制框架的案例。这种C#与ROS的集成方案为机器人开发提供了跨平台支持,同时兼顾了系统的高效性和可靠性。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1140

Flask 第三方组件之 login

在使用flask时,构建一个系统,用户登录注册是一个必不可少的过程,通常是使用Flask-Login模块。下面介绍使用Flask-Login登录注销,以及帮助大家解答一些可能比较常见的问题。 使用入门 首先,先概述下例子,有三个url,分别是: /auth/login 用于登录 /auth/logout用于注销 /test用于测试,需要登录才能访问 安装必要的库 pip install Flask==0.10.1 pip install Flask-Log...

fenglepeng的博客 3081

手把手教你用Qt和QScada框架,从零搭建一个简易的工业组态监控界面

本文详细介绍了如何使用Qt和QScada框架从零搭建工业组态监控界面,涵盖环境配置、界面设计、动态数据绑定及高级功能实现。通过实战案例演示,帮助开发者快速掌握SCADA系统开发技巧,提升工业自动化项目的开发效率。

weixin_32932149的博客 340

flask @login_required重构

flask 自带登录视图函数login_required,在前后端不分离情况下,我们可以直接调用官方的,但现在大部分项目都是前后端分离,以接口的形式出现,还有sign验证签名,下面是鄙人小改@login_required 实现登录视图验证和sign验证 源码: (代码不多,短小精悍,源码用到LoginManager模块这里不做详述) def login_required(func): @wrap...

need的博客 6018

C++实战:基于ONNX Runtime与OpenCV部署XFeat图像匹配模型

本文详细介绍了在C++环境中,利用ONNX Runtime与OpenCV高效部署XFeat图像匹配模型的完整流程。内容涵盖环境搭建、模型转换、核心代码封装及可视化实现,旨在帮助开发者将这一先进的深度学习模型集成到对性能要求苛刻的工业或嵌入式应用中,实现鲁棒且快速的特征匹配。

gpu4optimizer的博客 522

手把手教你用srec_cat生成带CRC校验的STM32固件(解决OTA常见校验失败问题)

本文针对STM32 OTA升级中常见的固件校验失败问题,提供了一套使用srec_cat工具自动生成带CRC32校验固件的实战解决方案。文章详细拆解了命令参数,指导开发者如何为固件嵌入CRC值、处理地址偏移及合并文件,从而确保Bootloader能可靠校验固件完整性,提升远程更新的稳定性。

kappa的博客 784

【Flask】一文详解 Flask-Login

Flask-Login 为 Flask 提供用户会话管理。它处理登录、注销和长时间记住用户会话等常见任务。Flask-Login 不绑定到任何特定的数据库系统或权限模型。唯一的要求是您的用户对象实现一些方法,并且您向能够从用户 ID 加载用户的扩展提供回调。

Data · Model · Agent · Repeat 7559

NVIDIA Jetson Orin Nano Super刷机避坑指南:从虚拟机配置到NVMe烧录实战

本文详细介绍了NVIDIA Jetson Orin Nano Super的完整刷机流程,涵盖虚拟机配置、SDK Manager安装、硬件连接、固件下载、rpcbind服务冲突解决以及NVMe烧录等关键步骤。重点解析了Super模式下的NVMe烧录命令参数和操作时机,帮助开发者高效完成刷机并避免常见错误。

y2z3a4b5c的博客 754

flask-login中的login_required装饰器

flask-login模块中login_required装饰器 先看看源码 def login_required(func):     @wraps(func)     def decorated_view(*args, **kwargs):         if request.method in EXEMPT_METHODS:             return func(*ar...

优快云_Gjx的博客 4569

飞牛fnNAS存储模式RAID 5数据恢复

中介绍了fnNAS存储空间的几个模式,细心的网友应该能感受到,我是非常推崇RAID 5的。但我认为,一般人出现1块硬盘损坏后,就能够赶紧采取处理措施了,再高的容灾等级也无法满足这个用户的需求了。》就完成了飞牛NAS存储空间的说明,包括了如何创建、怎么选择空间模式、RAID 5 硬盘故障后的更换、系统更换/重装后数据盘的恢复等等。在VMware中新建虚拟机,安装好fnNAS后,再向虚拟机添加“已有硬盘”(这就是所谓崩溃虚拟机的数据盘),此时新的fnNAS出现提示。在“选择要添加的硬盘”中,选择刚添加硬盘。

dgnankai的专栏 3011

微信小程序启用蓝牙设备特征值变化时的notify功能

注意:这里的serviceUUID、notifyCharacteristicUUID 我会在后面写入数据时做重点说明。isNotifyBLECharacteristic:false, //是否启用蓝牙设备服务特征 notify。二、启用蓝牙设备特征值变化时的notify功能。下一篇 将继续介绍 微信小程序蓝牙设备写入数据。

wsk198726的专栏 1173

Flask-Login的使用

Flask-Login插件中呆了6种信号,可以基于其中的信号做一些额外工作,比如user_logged_in来记录用户的登录次数和登录IP等。安装pip install flask-login初始化import flask import Flask from flask_login import LoginManagerapp = Flask(__name__) login_manager = Lo

奔跑的豆子的专栏 4224

MDIO接口协议与其详解——单片机

在单片机领域,通过MDIO接口可以与外部设备进行通信,实现对设备的控制和数据的读写。通过本文的介绍,你可以了解到MDIO接口协议的原理和使用方法,并参考源代码示例进行实际的开发和应用。具体的初始化方法与单片机的型号和开发环境有关,可以参考相应的单片机手册和开发工具的文档。(1)发送读取命令:向MDIO线发送读取命令,通常是发送一个特定的控制字节,用于指示要读取的寄存器地址。(1)发送写入命令:向MDIO线发送写入命令,通常是发送一个特定的控制字节,用于指示要写入的寄存器地址。二、MDIO接口协议使用方法。

web_class282的博客 2626

Flask-Login使用详解

先看一下flask-login模块的整体架构 基础的信息和全局配置这里就不多说,需要用到再斟酌也可以的。 这里也是针对每个模块较为常用的进行解释说明,后期再使用过程中遇到会进行补充。 Login_Manager LoginManager是一个类,有多个方法和属性;此类初始化的对象用于保存用于登录的设置。实例:class:LoginManager * *不绑定到特定应用程序,因此可以在代码的主体...

gymaisyl的博客 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

flask中的flask-login

在 Flask 中,用户认证通常是通过使用扩展库(例如 Flask-Login、Flask-HTTPAuth 或 Flask-Security)来实现的。

weixin_41777118的博客 1494

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Flask-Login

它提供了一种简单、优雅的方式来管理用户会话,并确保只有已认证的用户才能访问受保护的路由。装饰器:提供了一些预定义的装饰器,如 @login_required,可以轻松地保护路由和视图函数,限制只有已认证用户才能访问。用户认证和会话管理:Flask-Login 提供了用户登录、登出和保持会话等功能,可以方便地实现用户的身份验证和会话管理。定义一个用户模型类,通常继承自 Flask-Login 提供的 UserMixin 类,以实现基本的用户接口。它应该获取用户的 ID,并返回相应的用户对象。

Flask Web 1025

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

[python]Flask_Login

flask login的介绍与使用

weixin_67719939的博客 1831

[python][flask]Flask-Login 使用详解

Flask-Login是Flask的用户认证扩展,提供登录/注销、会话保护等功能。安装后需配置用户模型(继承UserMixin)、加载器函数和视图保护装饰器(@login_required)。支持记住我功能、角色访问控制和自定义未授权处理。系统默认开启基础会话保护,建议生产环境使用HTTPS和强密码哈希。该扩展简化了用户认证流程,适合快速构建安全认证系统。

一名不太专业的程序员 3353

flask login

文件总览 如下图所示,Flask-login的工作目录主要是login_manager、mixins、signals、sutils,其中login_manager是主要处理功能,mixins创建了两种用户模型(登录用户和匿名用户)并定义了各自相应的属性,signals主要是基于订阅者模式开发的一种扩展,用户可以充分的扩展其原本的功能,实现系统和业务的解耦,sutils则提供了一套公共处理函数。 ...

yiludege的博客 338

flask_login的使用

看外国文献的中文翻译 翻译的程度有的让人会疯,翻译最好的状态是异译 直译会显的很生硬 看起来确实难过;所以在看的时候,建议都看外国文献吧,或者自己用谷歌翻译,感觉比一些翻译的博客准多了; 在使用flask_login 之前,至少要了解flask怎么使用,设置配置启动 1,安装flask_login pip install flask_login 2,在flask项目中配置flas...

weixin_30879169的博客 274

Flask-Login深度详解

可以把它想象成办公楼大厅的前台:不关心你是哪个公司、工号是多少,也不负责核对你的身份证真伪,只负责在你刷卡进门后给你一张临时访客贴纸,并在你走动时认出你。头像地址、权限列表等易变或敏感数据,每次使用时从数据库实时取,避免会话过期后用户数据仍是旧版本。Flask-Login 是 Flask 框架下的一个扩展,专门负责管理网站的“谁进来了”这件事。如果做的是一个传统 Web 网站,页面由 Flask 渲染,用户登录状态靠 Cookie 维持,,它用 Flask-Login 处理登录状态,上层帮你搭好了脚手架。

leohu0723的博客 339

一文学会Flask-Login

LoginManager:登录管理对象UserMixin:用户类需要继承这个,里面提供一些用户状态login_user:用户登录后,将用户加入LoginManager进行管理logout_user:用户登出之后,从LoginManager中注销用户信息login_required:检查是否需要登录,在需要登录的视图上添加。

千层冷面的博客 1286

flask_login

目录1: flask_login安装:2: 配置flask_login3: 如何工作:4: 用户类5: 登录案例:6: 未登录访问:7: 请求加载器自定义登录:8: 匿名用户:9: 记住用户:10: FLASK_Login原理解析: 1: flask_login安装: pip install flask_login 官方地址: https://flask-login.readthedocs.io/en/latest/#installation 2: 配置flask_login from flask im

一夜奈何梁山 1405

Flask框架之用户登录模块flask_login模块

flask_login模块 flask-login为flask提供了用户会话管理。他处理了日常的登入,登出并且长时间记住用户的会话。 在会话中存储当前活跃的用户ID让你能够自由地登入和登出。 让你限制登入或登出,用户可以访问的试图。 处理让人棘手的记住我功能。 帮助你保护用户会话免遭cookie被盗的牵连。 .可以与以后可能使用的flask-principal或其他认证扩展集成。 一、配置你的应用 对一个使用flask-login的应用最重要的一部分是loginmanager类。

qq_41809511的博客 8763

Python flask 框架使用 flask-login 模块,来学习一下吧

一个 Flask 模块,可以为 Flask 应用程序提供用户登录功能。这了有个小细节需要注意,模块安装都使用中划线(),模块使用时用下划线在应用程序中导入并初始化上述代码中提及了类,该类是 Flask-Login 提供的主要入口点,用于管理用户登录状态。在你的 Flask 应用程序中初始化它。然后我们可以使用init_app()函数来初始化 LoginManager 实例并绑定到指定的 Flask 应用上。这样就可以在应用程序中使用该实例来管理用户登录状态。login_view。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

flask扩展 flask-login

# 安装 pip install flask-login 要想使用 Flask-Login 扩展,程序的用户模型类必须实现以下方法: is_authenticated() 如果用户已经登录,必须返回 True ,否则返回 False is_active() 如果允许用户登录,必须返回 True ,否则返回 False 。如果要禁用账户,可以返回 False is_anonymous() 对普通...

_Tsun 的博客 430
上一篇: URL
下一篇: Flask-多对多关系
PythonKidDz
博客等级 码龄10年 7粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值