Django框架之使用Session保持HTTP状态

news2024/11/27 11:51:53

HTTP协议是无状态的,每次请求都是新的请求;

客户端与服务器端的一次通信就是一次会话。

可使用cookie和session在客户端或者服务端存储有关会话的数据,来进行状态保持;

cookie使用在上篇。本篇是使用session进行状态保持及使用Redis存储session的笔记。

存储方式

Cookie:所有的数据存储在客户端,不要存储敏感的数据。

Session:所有数据存储在服务端,在客户端用cookie存储session_id。

状态保持:在一段时间内跟踪请求者的状态,以实现跨页面访问当前的请求者的数据。

注意:

不同请求者之间不会共享这个数据,与请求者一一对应。

启用session

settings.py文件中

session中间件

使用session

启用session后,每个HttpRequest对象都有一个类似字典对象的session数据。

使用方法

get(key, default=None) 根据键值获取session值

clear() 清空所有的会话

flush() 删除当前会话并删除会话的cookie

使用示例

设置路由

# session使用
path('blog', views.blog, name='blog'),
path('login', views.login, name='login'),
path('loginHandle', views.login_handle, name='loginHandle'),
path('checkout', views.checkout, name='checkout'),

 设置视图

from django.shortcuts import redirect
def blog(request):
    """blog网站"""

    username = request.session.get('name', '游客')
    return render(request, 'blog/index.html', {'username': username})


def login(request):
    """ 登录页面 """

    return render(request, 'blog/login.html')


def login_handle(request):
    """ 登录操作 """

    username = request.POST.get('username')

    # 存储session
    request.session['name'] = username
    return redirect('blog')

def checkout(request):
    """ 退出 """

    # request.session.clear()
    request.session.flush()

    return redirect('blog')

创建模板

首页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <style>
        #user {
            margin-left:100px;
        }
        .nav ul li{
            float:left;
            list-style:none;
            width:50px;
            border-left:1px solid #000;
            padding-left:20px;
        }
        .nav > ul > li.first{
            border:none;
        }

        .clear {
            clear:both;
        }
        .content {
            margin-top:10px;
        }
    </style>
</head>
<body>
    <div class="header">
        <b>blog首页</b>
        <span id="user">
            当前登录:
            {% if username == '游客' %}
                {{username}}  <a href="/myapp/login">去登录</a>
            {% else %}
                {{username}}  <a href="/myapp/checkout">退出</a>
            {% endif %}
        </span>
    </div>
    <div class="nav">
        <ul>
            <li class="first"><a href="#">推荐</a></li>
            <li><a href="#">Python</a></li>
            <li><a href="#">PHP</a></li>
            <li><a href="#">Java</a></li>
            <li><a href="#">Go</a></li>
        </ul>
    </div>
    <div class="clear"></div>
    <div class="content">
        网站内容网站内容网站内容网站内容网站内容网站内容
    </div>
</body>
</html>

登录页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>blog登录</title>
</head>
<body>
    <h2>blog登录</h2>
    <form action="/myapp/loginHandle" method="post">
        名称:<input type="text" name="username">
        <br/>
        密码:<input type="password" name="pwd">
        <br/>
        <input type="submit" value="登录">
    </form>
</body>
</html>

效果

未登录

登录页面

登录后

设置过期时间

set_expiry(value)

如果不设置,两个星期后过期

参数为整数

request.session.set_expiry(10)

参数:时间对象

0 关闭浏览器时失效

None 永不过期

存储session位置

数据库:默认存储在数据库中

SESSION_ENGINE = 'django.contrib.sessions.backends.db'

缓存:只存储在本地,如果丢失不能找回,比数据库快

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

数据库和缓存:优先从本地缓存中获取,读取不到再从数据库中获取

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'

redis缓存session

安装

pip install django-redis-sessions

配置settings.py

在settings.py最后一行增加,配置可按照使用redis修改

SESSION_ENGINE = 'redis_sessions.session'

SESSION_REDIS_HOST = 'localhost'

SESSION_REDIS_PORT = 6379

SESSION_REDIS_DB = 0

SESSION_REDIS_PASSWORD = ''

SESSION_REDIS_PREFIX = 'session'

验证redis存储

通过redis客户端连接取数据

首先从cookie中拿到session_id

然后通过redis中取session数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/513221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外观数列----2023/5/11

外观数列----2023/5/11 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字 1 开始&#xff0c;序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列&#xff1a; countAndSay(1) “1”…

Omniverse Replicator环境配置和使用说明

Omniverse Replicator使用说明 本教程将介绍Omniverse Replicator的环境配置和使用说明, 参加Sky Hackathon的同学可以参考本教程来合成训练数据集. 文章目录 Omniverse Replicator使用说明1. Omniverse环境配置1.a.安装Omniverse Launcher1.a.1.在下面的地址下载Omniverse La…

案例分享:ChatGPT写python脚本,轻松文本处理

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 在工作中&#xff0c;需要对数据进行筛选、分割和整理&#xff0c;当你接受到一个长长…

浅谈Android PMS解析APP信息流程

前言 前面我们了解了Zygote的启动流程&#xff0c;知道AMS、PMS都是由SystemServer进程启动的&#xff0c;我们都知道PMS主要负责App管理工作&#xff0c;这里我们简单从源码角度分析下PMS是如何解析APP解析的&#xff1b; 源码分析(API 30为例) 我们还是从PackageManagerSe…

SpringBoot缓存技术详解

文章目录 一、 缓存技术介绍1. 缓存技术简介2. JSR107核心接口3. JSR107 图示3. SpringBoot缓存抽象4. 缓存常用注解和接口 一、 缓存技术实战1. Cacheable注解2. 缓存的工作原理4. Cacheable注解的工作流程 一、 缓存技术介绍 1. 缓存技术简介 缓存技术主要分为两大类缓存可…

6 进程的环境

6.1 main函数 C程序总是从main函数开始执行。main函数的原型是&#xff1a; int main(int argc, char *argv[]) 6.2 进程终止 有五种方式使进程终止&#xff1a; &#xff08;1&#xff09;正常终止&#xff1a; &#xff08;a&#xff09;从main返回。 &#xff08;b&…

Pycharm十种不为人所知的技巧,不得不知道

Pycharm是Python语言开发中的一个非常强大的IDE工具&#xff0c;其高度的定制能力、日常开发中常用的工具和各种快捷键等功能&#xff0c;都能帮助Pycharm用户提高开发效率。但是&#xff0c;Pycharm中的许多功能并不为人所知。因此&#xff0c;以下是十种Pycharm技巧&#xff…

【MCS-51】51单片机指令系统大全

指令是指挥微型计算机工作的的计算机命令&#xff0c;对于51单片机来说&#xff0c;其主要使用的指令有两种形式&#xff1a;机器语言指令和汇编语言指令。 机器语言指令是指使用二进制代码表示的指令&#xff1b; 汇编语言指令是指使用容易我们记忆的缩写符号表示的机器语言…

YOLO入门指南:理解YOLO原理及构建第一个目标检测模型

YOLO&#xff08;You Only Look Once&#xff09;是一种快速且准确的目标检测算法&#xff0c;可以在图像或视频中检测出多个对象的位置和类别。在本篇文章中&#xff0c;我们将介绍YOLO的基本原理&#xff0c;并使用TensorFlow构建第一个目标检测模型。 YOLO的基本原理 YOLO的…

linux 安装jdk、tomcat

文章目录 前言一、Linux上安装jdk1、jdk安装与配置过程2、linux查看jdk安装路径 二、Linux上安装tomcat1、tomcat安装与配置过程2、对外开放访问的端口、重启防火墙、查看日志 三、在window系统中通过浏览器访问 前言 先检察是否安装jdk java -jar ## 查看是否安装jdk java -…

K8S—Helm

一、Helm介绍 helm通过打包的方式&#xff0c;支持发布的版本管理和控制&#xff0c;很大程度上简化了Kubernetes应用的部署和管理。 Helm本质就是让k8s的应用管理&#xff08;Deployment、Service等&#xff09;可配置&#xff0c;能动态生成。通过动态生成K8S资源清单文件&a…

文笔润色-文本校对改写工具

文段改写软件 写作是一项对于很多人来说都需要频繁进行的活动&#xff0c;无论是工作中的商业写作还是学术写作&#xff0c;在完成优质内容的同时也需要付出大量的时间和精力进行语言润色和修改。然而&#xff0c;现在有了147ChatGPT改写润色软件&#xff0c;该软件可以全自动…

近期分享学习心得

1、数据类型 原始类型undefined null number string boolean symbol bigint 引用类型 对象 2、大厂为什么不允许赋值undifined&#xff1f; 必须let avoid 0;效果一样 void是关键字&#xff0c;后面跟表达式&#xff0c;无论跟啥最终制造undefined&#xff0c;但是习惯写0。…

动态规划设计

文章目录 动态规划设计一、什么是最长递增子序列&#xff1f;[300. 最长递增子序列](https://leetcode.cn/problems/longest-increasing-subsequence/)注意子序列和子串的区别&#xff1a; 二、动态规划解法2.1什么是数学归纳法&#xff1f;2.2最长递增子序列中数学归纳的实际应…

simulink电力系统仿真(1):电力系统库+(电力系统基础知识)

文章目录 基础知识仿真库搭建一个简单的电路 基础知识 ★三相交流电&#xff1a;三相电是三组幅值相等、频率相等、相位互相差120的交流电&#xff0c;由有三个绕组的三相发电机产生&#xff0c;是工业上常用的电源&#xff0c;可提供超过数千瓦或以上功率的电力。★电力系统暂…

看一看吧,面试真的卷......

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;今年面试实在是太卷了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约…

美术培训学校学生作品管理平台

本系统主要是为了美术培训学校和学生使用的&#xff0c;系统分为了前台和后台两部分&#xff0c;前台部分主要是展示美术培训学校的信息和让学生查看自己的课程信息服务的&#xff0c;后台主要是管理人员对系统进行管理使用的 前台部分功能 1. 网站首页&#xff0c;首页部分…

jar的反编译为java文件

目录 1、cfr工具下载 2、反编译指令 3、反编译说明 1、cfr工具下载 反编译插件工具比较多&#xff0c;但是我认为最后用的工具为cfr&#xff0c;基本能解决所有jar包&#xff0c;下载地址为&#xff1a;cfr官网 点击图中位置下载即可 2、反编译指令 来到你下载完成cfr目录下&…

蓝牙耳机哪个牌子好?数码粉总结学生平价蓝牙耳机推荐

蓝牙耳机这几年发展飞速&#xff0c;涌现了很多品牌和产品&#xff0c;越来越多的用户选择放弃有线耳机使用蓝牙耳机&#xff0c;学生们也不例外。前段时间看到网上很多学生在讨论蓝牙耳机哪个牌子好&#xff0c;我整理了五款口碑最好的学生平价蓝牙耳机推荐清单&#xff1a; 1…

cesium坐标系转换:经纬度地理坐标系 弧度地理坐标系 笛卡尔坐标 屏幕坐标之间的相互转换

参考了网上资料 核心就是 cesium 计算的地理数据用弧度坐标系表示&#xff08;很多公式计算出来的是弧度结果&#xff09;&#xff0c;我们采集的数据是经纬度表示的&#xff08;即我们正常的经纬度&#xff09;&#xff0c;围绕着cesium球体展示的用笛卡尔坐标系计算的其方位…