Django的request.session缓存的广发用法

2024-02-02 01:28

本文主要是介绍Django的request.session缓存的广发用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

相信同学们在学习PythonWeb开发的时候和我一样会遇到许多问题,今天我这边举几个例子涉及到session缓存的问题,由于当时并没有接触session缓存的技术内容,所以往往头大,一时间不知带如何解决,老师也会告诉我使用缓存解决,可能自己太懒了吧,不愿意接受新技术,所以也就一直没有去接触,但是后来随着自己因为副业和工作的需求,迫使自己不得已必须去学习Session缓存以及Cookie会话等内容,本次博客将会对session缓存的基本使用和原理去做一个简单的讲解!

Session的主要使用:

用处其一:中间件的使用

比如我们在做网站的时候,我们规定如果你要是没有登陆注册便不被允许访问后续或者别的页面内容,那么此时此刻便需要session缓存的功能了,我们通过在PythonWeb框架里(如Django)使用request.session()方法来检查我们的网页的数据信息缓存里有没有我们用户注册的信息(另外我们在浏览器访问任何网页时,浏览器会获取的session和cookie的),如果检测到网页里有我们的注册信息便可以访问后续或者别的页面,但是如果没有检测到便可以弹出拒绝访问或者强制性让我们返回或者重定向某一个指定的页面。

比如如下的代码:

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import render,redirect
import re
class UserMW(MiddlewareMixin):def process_request(self,request):path = request.path_infoif path == '/myApp/login/' or path == '/myApp/registry/' or re.search('^/admin.*',path):return Noneelse:if not request.session.get('username'):return redirect('login')return Nonedef process_view(self,request,callback,callback_args,callback_kwargs):return Nonedef process_response(self,request,response):return response

在上面的代码里,我会规定了如果路劲为

'/myApp/login/' or '/myApp/registry/' or admin(后台)则正常访问,因为这些登录以及注册和后台的页面一般是没有安全或者隐私数据的,但是规定了如果网址栏目输入的网址不是以上的我们在检测一下浏览器的缓存里有没有注册登录的信息,如果有的话说明以及登陆过了,便可以在网址栏目里输入网页的任意一个页面的url,否则将重定向强制返回login的登录页面。在代码里我们看见了request.session的代码字符,没错request.session就是获取我们session缓存里用户信息的,username则是我们在登录时request.session['username'] = user.username所定义规定的。不要忘了最后要在settings的中间件middreware去配置我们写的中间件函数的位置哦。
用处其二:登录与否的前端显示状态

我们在做web开发时经常会遇到这样的一个情况,在你没有登陆时,我们的个人状态那里会显示登录挥着注册字样的内容,登录之后则会显示我们的头像或者我们的昵称等内容,其实这些也是和我们今天要讲的session有紧密关联的,通过上面的介绍相比我们现在已经有了一点感觉啦,没错就是通过我们的session缓存看浏览器里是否有登录注册的信息,有的话就显示个人的头像或者昵称,没有的话就显示登录/注册的文本内容,我们看如下代码:

            <ul class="navbar-nav  d-flex dropdown" style="--bs-scroll-height: 100px;margin-right: 30px">{% if request.session.name %}<a class="nav-link dropdown-toggle" href="#" id="navbarScrollingDropdown" role="button"data-bs-toggle="dropdown" aria-expanded="false">{{ request.session.name.name }}<img style="border-radius: 50%" src="/media/{{ request.session.name.photo }}" alt="" width="40"height="40"></a><ul class="dropdown-menu" aria-labelledby="navbarScrollingDropdown"><li><a class="dropdown-item" href="{% url 'pswd_update' %}">修改密码</a></li><li><a class="dropdown-item" href="{% url 'logout' %}">退出登录</a></li></ul>{% else %}<a class=" btn btn-outline-secondary" href="{% url 'login' %}">登录/注册</a>{% endif %}</ul>

如上代码实在pythonweb的前端页面所写,在第二行我们发现如果获取到我们的注册信息,就显示我们的用户名和头像图片,否则就显示登录/注册内容,另外提醒一下,在pythonweb前端写呢的时候一定要遵循其模板哦,比如在Django框架写,就要遵循django模板语言的。

结尾:

session的用法和作用有很多,以上讲的主要就是同学们在做简单的Web项目会90%遇到的情况,另外在做课设或者毕设都是极大可能使用到的,好啦,今天的内容就分享到这里啦,有什么问题可以留言或者私信我,看到会第一时间恢复的,提前祝各位新年快乐!

这篇关于Django的request.session缓存的广发用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/669077

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

UVM:callback机制的意义和用法

1. 作用         Callback机制在UVM验证平台,最大用处就是为了提高验证平台的可重用性。在不创建复杂的OOP层次结构前提下,针对组件中的某些行为,在其之前后之后,内置一些函数,增加或者修改UVM组件的操作,增加新的功能,从而实现一个环境多个用例。此外还可以通过Callback机制构建异常的测试用例。 2. 使用步骤         (1)在UVM组件中内嵌callback函

这些ES6用法你都会吗?

一 关于取值 取值在程序中非常常见,比如从对象obj中取值 const obj = {a:1b:2c:3d:4} 吐槽: const a = obj.a;const b = obj.b;const c = obj.c;//或者const f = obj.a + obj.b;const g = obj.c + obj.d; 改进:用ES6解构赋值

防止缓存击穿、缓存穿透和缓存雪崩

使用Redis缓存防止缓存击穿、缓存穿透和缓存雪崩 在高并发系统中,缓存击穿、缓存穿透和缓存雪崩是三种常见的缓存问题。本文将介绍如何使用Redis、分布式锁和布隆过滤器有效解决这些问题,并且会通过Java代码详细说明实现的思路和原因。 1. 背景 缓存穿透:指的是大量请求缓存中不存在且数据库中也不存在的数据,导致大量请求直接打到数据库上,形成数据库压力。 缓存击穿:指的是某个热点数据在

PHP APC缓存函数使用教程

APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”。它为我们提供了缓存和优化PHP的中间代码的框架。 APC的缓存分两部分:系统缓存和用户数据缓存。(Linux APC扩展安装) 系统缓存 它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记。如果未过期,则使用缓存的中间代码运行。默认缓存 3600s(一小时)。但是这样仍会浪费大量C

缓存策略使用总结

缓存是提高系统性能的最简单方法之一。相对而言,数据库(or NoSQL数据库)的速度比较慢,而速度却又是致胜的关键。 如果使用得当,缓存可以减少相应时间、减少数据库负载以及节省成本。本文罗列了几种缓存策略,选择正确的一种会有很大的不同。缓存策略取决于数据和数据访问模式。换句话说,数据是如何写和读的。例如: 系统是写多读少的吗?(例如基于时间的日志)数据是否是只写入一次并被读取多次?(例如用户配