当前位置: 首页 > news >正文

优秀设计网站/推广平台的方式有哪些

优秀设计网站,推广平台的方式有哪些,产业园门户网站建设方案,朝阳网络信息有限公司文章目录 一、安装及初始化二、设置用户加载回调函数三、定义User类四、实现登陆操作五、自定义登陆过程六、使用请求加载器自定义登录七、匿名用户功能八、记住我功能 Flask-Login是一个用于处理用户认证和会话管理的Flask插件。它简化了在Flask应用程序中实现用户登录、登出以…

文章目录

      • 一、安装及初始化
      • 二、设置用户加载回调函数
      • 三、定义User类
      • 四、实现登陆操作
      • 五、自定义登陆过程
      • 六、使用请求加载器自定义登录
      • 七、匿名用户功能
      • 八、记住我功能

Flask-Login是一个用于处理用户认证和会话管理的Flask插件。它简化了在Flask应用程序中实现用户登录、登出以及保护视图等功能的过程。

一、安装及初始化

flask-login官方文档

pip install flask-login

在flask中进行配置:

from flask import Flask
from flask_login import LoginManagerapp = Flask(__name__)
login_manager = LoginManager()# 初始化LoginManager对象
login_manager.init_app(app)

完成初始化之后,就可以在应用中使用login_manager对象来处理用户认证和会话管理等功能。例如设置用户加载回调函数
保护视图函数等。

二、设置用户加载回调函数

此回调用于从会话中存储的用户ID重新加载用户对象。它应该获取用户的ID,并返回相应的用户对象。例如:

@login_manager.user_loader
def load_user(user_id):# 根据用户 ID 查询用户对象user = User.query.get(int(user_id))return user

三、定义User类

定义 User 类:创建一个 User 类,表示应用程序中的用户,该类需要实现以下几个方法:

  • is_authenticated():返回 True 如果用户已经通过认证,否则返回 False。
  • is_active():返回 True 如果用户是活跃的,否则返回 False。如果用户被禁用,可以返回 False。
  • is_anonymous():返回 True 如果当前用户是匿名用户,否则返回 False。
  • get_id():返回一个唯一标识符的字符串,用于标识用户。
class User:def __init__(self, user_id, username, password):self.id = user_idself.username = usernameself.password = passworddef is_authenticated(self):# 根据你的认证逻辑判断用户是否已经通过认证return True  # 假设用户都已经通过认证def is_active(self):# 根据你的逻辑判断用户是否是活跃的return True  # 假设所有用户都是活跃的def is_anonymous(self):# 根据你的逻辑判断当前用户是否是匿名用户return False  # 假设所有用户都不是匿名的def get_id(self):# 返回一个唯一标识符的字符串,用于标识用户return str(self.id)@staticmethoddef get(user_id):# 从数据库或其他数据源中获取用户对象# 根据用户 ID 查询用户,并返回 User 对象# 如果找不到用户,可以返回 Nonereturn User(user_id, 'username', 'password')

四、实现登陆操作

login_user(user)会自动调用 User 对象中的 is_authenticated()、is_active() 和 get_id() 方法来判断用户是否通过认证、是否活跃以及获取用户的唯一标识符。

@app.route('/login', methods=['GET', 'POST'])
def login():form = LoginForm()# 验证表单if form.validate_on_submit():login_user(user)flask.flash('Logged in successfully.')# 获取名为"next"的查询参数的值next = flask.request.args.get('next')# 检查验证给定的URL是否与当前请求的主机和协议匹配,防止跳转到不受信任的主机或使用不安全的协议。if not url_has_allowed_host_and_scheme(next, request.host):return flask.abort(400)return flask.redirect(next or flask.url_for('index'))return flask.render_template('login.html', form=form)

登陆成功后就可以在模板中使用current_user来获取当前登陆用户了。

{% if current_user.is_authenticated %}Hi {{ current_user.name }}!
{% endif %}

需要进行登陆验证的视图函数可以使用@login_required修饰器来进行装饰。

也可以使用logout_user()方法来退出登陆。

@app.route("/settings")
@login_required
def settings():pass@app.route("/logout")
@login_required
def logout():logout_user()return redirect(somewhere)

五、自定义登陆过程

默认情况下,当用户试图在未登录的情况下访问login_required视图时,Flask login会闪烁一条消息,并将其重定向到登录视图。(如果未设置登录视图,它将中止,并显示401错误。)
所以我们需要设置登录页面的视图函数,并指定登录页面的 URL。

# 自定义未登录消息视图
login_manager.login_view = 'login'
# 自定义未登录消息内容
login_manager.login_message = u"Bonvolu ensaluti por uzi tiun paĝon."
# 自定义未登录消息类别
login_manager.login_message_category = "info"

@login_manager.unauthorized_handler 是 Flask-Login 提供的装饰器,用于定义未经授权用户访问受保护页面时的处理方式。
通过此修饰器能够帮助定制未经授权访问的处理方式,以便提供更好的用户体验和安全性。

@login_manager.unauthorized_handler
def unauthorized_callback():return redirect('/login')

六、使用请求加载器自定义登录

使用请求加载器自定义登录过程。请求加载器允许你根据请求中的信息动态加载用户对象,以满足特定的登录需求。例如获取请求头中的认证信息、查询参数等。

@login_manager.request_loader
def load_user_from_request(request):# 从请求中获取用户标识,例如获取请求头中的认证信息、查询参数等user_id = request.headers.get('Authorization')# 根据用户标识加载用户对象user = User.query.get(user_id)return user

七、匿名用户功能

Flask-Login 提供了匿名用户功能,允许你在未登录的情况下访问受保护的页面。匿名用户对象是一个特殊的 UserMixin 对象,它提供了一些默认的属性和方法,可以模拟已登录用户的行为。

  1. 设置login_manager.anonymous_user属性
login_manager.anonymous_user = Anonymous
  1. 定义匿名对象Anonymous
# 定义匿名用户对象
class Anonymous(AnonymousUserMixin):@propertydef is_authenticated(self):return False

八、记住我功能

"记住我"功能是一种常见的身份验证功能,它允许用户在关闭浏览器后仍然保持登录状态。当用户勾选 “记住我” 选项时,系统会生成一个长期有效的凭证(通常是一个加密的令牌),并在用户下次访问时使用该凭证自动登录用户。
要实现 “记住我” 功能,你可以借助 Flask-Login 提供的 remember_me 参数和相关方法。

@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':# 验证用户名和密码,并获取用户 IDusername = request.form['username']password = request.form['password']user_id = authenticate(username, password)  # 自定义的验证函数if user_id:# remember 值为 True/Falseremember_me = request.form.get('remember_me')user = get_user(user_id)login_user(user, remember=remember_me)return '登录成功'else:return '用户名或密码错误'    return render_template('login.html')

当用户勾选了 “记住我” 选项后,系统会生成一个长期有效的凭证(通常是一个加密的令牌),并在用户下次访问时使用该凭证自动登录用户,无需再次进行登录操作。

相关文章:

flask web 学习之用户认证与会话管理

文章目录 一、安装及初始化二、设置用户加载回调函数三、定义User类四、实现登陆操作五、自定义登陆过程六、使用请求加载器自定义登录七、匿名用户功能八、记住我功能 Flask-Login是一个用于处理用户认证和会话管理的Flask插件。它简化了在Flask应用程序中实现用户登录、登出以…...

更改wpf原始默认按钮的样式

样式 代码 <Window x:Class"WpfApp4.Window1"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend/2008…...

【协议】HTTP、HTTPS和HTTP2.0学习总结

1. TCP/IP四层协议 记得大学学网络课程的时候&#xff0c;学的都是OSI/RM七层协议&#xff0c;应用层 -> 表示层 -> 会话层 -> 传输层->网络层->数据链路层->物理层&#xff0c;当时学的时候&#xff0c;感觉太抽象了&#xff0c;学得个一知半解。大脑在接收…...

[数据结构]顺序表

1、顺序表的概念及结构 1.1 线性表 线性表&#xff08; linear list &#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#…...

北斗卫星为野外科考人员提供安全保障

北斗卫星为野外科考人员提供安全保障 自第二次青藏高原综合科学考察研究启动以来&#xff0c;青海不断提升科考服务保障能力&#xff0c;推动科考全程信息化&#xff0c;有效促进科考成果转化。 为保障科考人员的人身安全&#xff0c;青海省青藏科学考察服务中心开发了基于北…...

Linux的一些快捷键(hot keyboard)

Ctrl Alt t&#xff1a;打开bash&#xff08;就是命令框窗口&#xff09; Ctrl Alt F3~F6&#xff1a;打开tty终端&#xff08;纯命令行终端&#xff0c;每个Linux发行版不相同&#xff0c;我的是Ubuntu20版&#xff09; Alt F4&#xff1a;关闭当前窗口&#xff08;Windo…...

Charles将证书安装到系统的方法(adb)

基本情况参考此帖&#xff1a;Charles 安卓抓包 unknown 和证书无效的解决方案&#xff08;无需改代码&#xff09;_client ssl handshake failed: an unknown issue occu-CSDN博客 此解决方案仅适用于已root设备默认已经在电脑上安装并配置了Charles&#xff0c;安卓手机也下载…...

git 常用指令 (先收藏再说)

Git Git是一种分布式版本控制系统&#xff0c;用于记录一个或若干个文件内容的变化&#xff0c;以便查阅和回溯。 它的工作原理可以概括为以下几点&#xff1a; 工作区&#xff08;Workspace&#xff09;&#xff1a;这是你在电脑上看到的目录&#xff0c;工作区是你用来修改文…...

2024问题汇总

2024问题汇总 Linux1.df-h / df -i 命令2.为多网卡Linux云服务器配置策略路由 Windows1.快速进入控制面板 网络连接指令 Linux 1.df-h / df -i 命令 df -h / df -i 都表示查看磁盘空间使用信息 如果遇到磁盘快满的情况&#xff0c;用这两个命令区别如下 df -h 是去删除比较大 …...

爬虫(学习笔记)

python爬虫 一、Python基础回顾变量类型其他操作面向对象编程 二、爬虫流程HTTP协议HTML爬虫demo01爬虫demo02 学习资料 Python爬虫 爬虫实战案例 AI学堂爬虫教学 一、Python基础回顾 变量类型 可变类型&#xff1a;可以进行添加、修改、删除 &#xff08;列表、字典…&#x…...

让业务满意的性能测试报告模板应该是怎样的?

前言 先前在北京出差&#xff0c;和同事聊到了一个关于流量网关如何进行性能验证的需求&#xff0c;当时专门与同事进行了一番讨论&#xff0c;后面写了一篇相关文章。 结果没过多久同事找到我&#xff0c;希望我帮他们写一份给到业务团队的性能测试报告&#xff0c;原因是业…...

高防IP如何保护服务器

首先我们要知道什么是高防IP~ 高防IP是指高防机房所提供的ip段&#xff0c;主要是针对互联网服务器遭受大流量DDoS攻击时进行的保护服务。高防IP是目前最常用的一种防御DDoS攻击的手段&#xff0c;用户可以通过配置DDoS高防IP&#xff0c;将攻击流量引流到高防IP&#xff0c;防…...

C++提高编程——STL:string容器、vector容器

本专栏记录C学习过程包括C基础以及数据结构和算法&#xff0c;其中第一部分计划时间一个月&#xff0c;主要跟着黑马视频教程&#xff0c;学习路线如下&#xff0c;不定时更新&#xff0c;欢迎关注。 当前章节处于&#xff1a; ---------第1阶段-C基础入门 ---------第2阶段实战…...

three.js从入门到精通系列教程004 - three.js透视相机(PerspectiveCamera)滚动浏览全景大图

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>three.js从入门到精通系列教程004 - three.js透视相机&#xff08;PerspectiveCamera&#xff09;滚动浏览全景大图</title><script src"js/three.js"&g…...

Gradle 笔记

Gradle依赖管理&#xff08;基于Kotlin DSL&#xff09; **注意&#xff1a;**如果不是工作原因或是编写安卓项目必须要用Gradle&#xff0c;建议学习Maven即可&#xff0c;Gradle的学习成本相比Maven高很多&#xff0c;而且学了有没有用还是另一回事&#xff0c;所以&#xff…...

flume案例

在构建数仓时&#xff0c;经常会用到flume接收日志数据&#xff0c;通常涉及到的组件为kafka&#xff0c;hdfs等。下面以一个flume接收指定topic数据&#xff0c;并存入hdfs的案例&#xff0c;大致了解下flume相关使用规则。 版本&#xff1a;1.9 Source Kafka Source就是一…...

信用评价研究MATLAB仿真代码

信用评价是各种店铺卖家分析买家信用行为的重要内容, 本文给出随机仿真代码模拟实际交易过程的信用评价. 主要研究内容有: (1)研究最大交易额和信用度的关系 (2)研究买家不评价率对信用度影响 (3)研究交易次数对信用度影响 MATLAB程序如下: 主程序main.m %% clc;close a…...

网络安全产品之认识防毒墙

在互联网发展的初期&#xff0c;网络结构相对简单&#xff0c;病毒通常利用操作系统和软件程序的漏洞发起攻击&#xff0c;厂商们针对这些漏洞发布补丁程序。然而&#xff0c;并不是所有终端都能及时更新这些补丁&#xff0c;随着网络安全威胁的不断升级和互联网的普及&#xf…...

android 防抖工具类,经纬度检查工具类

一&#xff1a;点击事件防抖工具类&#xff1a; public abstract class ThrottleClickListener implements View.OnClickListener {private long clickLastTimeKey 0;private final long thresholdMillis 500;//millisecondsOverridepublic void onClick(View v) {long curr…...

PgSQL - 17新特性 - 块级别增量备份

PgSQL - 17新特性 - 块级别增量备份 PgSQL可通过pg_basebackup进行全量备份。在构建复制关系时&#xff0c;创建备机时需要通过pg_basebackup全量拉取一个备份&#xff0c;形成一个mirror。但很多场景下&#xff0c;我们往往不需要进行全量备份/恢复&#xff0c;数据量特别大的…...

Vue3setup()的非语法糖和语法糖的用法

1、setup()的语法糖的用法 script标签上写setup属性&#xff0c;不需要export default {} setup() 都可以省 创建每个属性或方法时也不需要return 导入某个组件时也不需要注册 <script setup > // script标签上写setup属性&#xff0c;不需要export default {} set…...

HTTP状态信息

1xx: 信息 消息:描述:100 Continue服务器仅接收到部分请求&#xff0c;但是一旦服务器并没有拒绝该请求&#xff0c;客户端应该继续发送其余的请求。101 Switching Protocols服务器转换协议&#xff1a;服务器将遵从客户的请求转换到另外一种协议。 2xx: 成功 消息:描述:200…...

CSS之边框样式

让我为大家介绍一下边框样式吧&#xff01;如果大家想更进一步了解边框的使用&#xff0c;可以阅读这一篇文章&#xff1a;CSS边框border 属性描述none没有边框,即忽略所有边框的宽度(默认值)solid边框为单实线dashed边框为虚线dotted边框为点线double边框为双实线 代码演示&…...

k8s-helm

Helm: 什么是helm,在没有这个heml之前&#xff0c;deployment service ingress的作用就是通过打包的方式&#xff0c;把deployment service ingress这些打包在一块&#xff0c;一键式的部署服务&#xff0c;类似于yum 官方提供的一个类似于安全仓库的功能&#xff0c;可以实现…...

黑马程序员JavaWeb开发|Maven高级

一、分模块设计与开发 分模块设计&#xff1a; 将项目按照功能拆分成若干个子模块&#xff0c;方便项目的管理维护、扩展&#xff0c;也方便模块间的相互调用&#xff0c;资源共享。 注意&#xff1a;分模块开发需要先对模块功能进行设计&#xff0c;再进行编码。不会先将工…...

【经验分享】MAC系统安装R和Rstudio(保姆级教程)安装下载只需5min

最近换了Macbook的Air电脑&#xff0c;自然要换很多新软件啦&#xff0c;首先需要安装的就是R和Rstudio啦&#xff0c;网上的教程很多很繁琐&#xff0c;为此我特意总结了最简单实用的安装方式: 一、先R后Rstudio 二、R下载 下载网址&#xff1a;https://cran.r-project.org …...

探索设计模式的魅力:“感受单例模式的力量与神秘” - 掌握编程的王牌技巧

在软件开发的赛场上&#xff0c;单例模式以其独特的魅力长期占据着重要的地位。作为设计模式中的一员&#xff0c;它在整个软件工程的棋盘上扮演着关键性角色。本文将带你深入探索单例模式的神秘面纱&#xff0c;从历史渊源到现代应用&#xff0c;从基础实现到高级技巧&#xf…...

SpringCloud Aliba-Seata【上】-从入门到学废【7】

目录 &#x1f9c2;.Seata是什么 &#x1f32d;2.Seata术语表 &#x1f953;3.处理过程 &#x1f9c8;4.下载 &#x1f37f;5.修改相关配置 &#x1f95e;6.启动seata 1.Seata是什么 Seata是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能…...

C# Cad2016二次开发选择csv导入信息(七)

//选择csv导入信息 [CommandMethod("setdata")] //本程序在AutoCAD的快捷命令是"DLLLOAD" public void setdata() {Microsoft.Win32.OpenFileDialog dlg new Microsoft.Win32.OpenFileDialog();dlg.DefaultExt ".csv";// Display OpenFileDial…...

[陇剑杯 2021]日志分析

[陇剑杯 2021]日志分析 题目做法及思路解析&#xff08;个人分享&#xff09; 问一&#xff1a;单位某应用程序被攻击&#xff0c;请分析日志&#xff0c;进行作答&#xff1a; 网络存在源码泄漏&#xff0c;源码文件名是_____________。(请提交带有文件后缀的文件名&…...