[Python]Django会话保持(cookie & session)(二)

简介: [Python]Django会话保持(cookie & session)(二)

2.6 删除Cookie

可以通过HttpResponse对象中的delete_cookie方法来删除。

语法:

HttpResponse.delete_cookie('cookie名')

login/urls.py:

from django.urls import path
from login import views
urlpatterns = [
    path('', views.login),
    path('set_cookie/', views.set_cookie),
    path('get_cookie/', views.get_cookie),
    path('del_cookie/', views.del_cookie)
]

login/views.py:

from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
from django.http import JsonResponse
from django.shortcuts import redirect
from django.urls import reverse
import json
# Create your views here.
def set_cookie(request):
    response = HttpResponse('set_cookie')
    # 在响应中设置Cookie为 username=zs
    response.set_cookie('username', value='zs')
    # 返回响应
    return response
def get_cookie(request):
    # 获取浏览器请求时携带的cookie
    cookies = request.COOKIES
    print('cookies: ', cookies)
    print('cookies_type: ', type(cookies))
    # 获取cookie中的用户名
    # 由于cookies是字典类型,所以可以使用字典方式获取cookie中某一个值
    username = cookies['username']
    print('username: ', username)
    # 将cookie以JSON字符串的形式返回给浏览器
    return JsonResponse(cookies)
def del_cookie(request):
    response = HttpResponse('del_cookie')
    # 由于不为第一次请求,cookie存在,返回响应时,会将发送过来的cookie返回
    # 删除响应对象中的cookie
    response.delete_cookie('username')
    # 返回响应
    return response

删除Cookie,也可通过将Cookie的有效时间设置为0实现:

HttpResponse.set_cookie(key, value, max_age=0)

2.7 从http协议角度理解Cookie的流程

  • 第一次请求
  1. 我们是第一次请求服务器,不会携带任何cookie信息,请求头中没有任何cookie信息
  2. 服务器会为响应设置cookie信息,响应头中有set_cookie信息
  • 第二次请求及其之后的
  1. 我们第二次及其之后的请求都会携带cookie信息,请求头中有cookie信息
  2. (可选)在当前我们的代码中,没有再在响应头中设置cookie,所以响应头中没有set_cookie信息

3. Session

3.1 Session简介

保存在服务器的数据,叫做Session。Session需要依赖于Cookie,如果浏览器禁用了Cookie,则Session不能实现。因为设置session会生成一个sessionid保存cookie中响应给客户端,之后客户端再次发送请求,cookie中的sessionid没问题,可以直接获取session中的数据。

sessionid由服务器自动设置

3.2 Session流程

  • 第一次请求:
  1. 我们第一次请求的时候可以携带一些信息(用户名/密码) ,cookie中没有任何信息
  2. 当我们的服务器接收到这个请求之后,进行用户名和密码的验证,验证没有问题可以设置session信息
  3. 在设置session信息的同时(session信息保存在服务器端) .服务器会在响应头中设置一个session id
  4. 客户端(浏览器)在接收到响应之后,会将cookie信息保存起来(保存session id的信息)
  • 第二次及其之后的请求:
  1. 第二次及其之后的请求都会携带session id信息
  2. 当服务器接收到这个请求之后,会获取到session id信息,然后进行验证
  • 验证成功,则可以获取session信息(session信息保存在服务器端)

3.3 启用Session

Django项目默认启用Session。

可以在项目的settings.py文件中查看

如需禁用session,将上图中的session中间件注释掉即可。

3.4 Session的存储位置

Session默认保存在服务器的数据库中。

3.5 设置Session

通过HttpRequest对象的session属性对Session进行读写操作。

HttpRequest.session可以理解为字典,可以以键值对的格式设置session。

我们在设置session时,session做了2件事,将数据保存在数据库中,设置一个cookie信息,这个cookie信息以sessionid为key

如果sessionid已经存在,则不会再次生成,只会对session中的数据进行更新

语法:

request.session['键']=值

login/urls.py:

from django.urls import path
from login import views
urlpatterns = [
    path('', views.login),
    path('set_cookie/', views.set_cookie),
    path('get_cookie/', views.get_cookie),
    path('del_cookie/', views.del_cookie),
    path('set_session/', views.set_session)
]

login/views.py:

from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
from django.http import JsonResponse
from django.shortcuts import redirect
from django.urls import reverse
import json
# Create your views here.
def set_session(request):
    # 1. 获取浏览器传递的Cookie
    # 第一次请求没有cookie
    cookies = request.COOKIES
    print(cookies)
    # 2. 用户名和密码进行验证
    # 假设认为用户名和密码正确
    username = 'zszszs'
    # 3. 设置session信息
    # request.session可以理解为字典
    # 服务器会自动在响应头中设置一个session id
    request.session['username'] = username
    # 4. 返回响应
    return HttpResponse('set_session')

3.6 读取Session

通过HttpRequest对象的session属性对Session进行读写操作。

HttpRequest.session可以理解为字典,可以根据键读取Session值。

语法:

request.session.get('键',默认值)

login/urls.py:

from django.urls import path
from login import views
urlpatterns = [
    path('', views.login),
    path('set_cookie/', views.set_cookie),
    path('get_cookie/', views.get_cookie),
    path('del_cookie/', views.del_cookie),
    path('set_session/', views.set_session),
    path('get_session/', views.get_session)
]

login/views.py:

def get_session(request):
    # 1. 请求会通过cookie将session id发送给服务器
    cookies = request.COOKIES
    print(cookies)
    # 2. 获取session id,进行验证
    # 浏览器发送过来的请求cookie会携带session id
    # cookie中的session id没问题可以直接获取session中的信息
    # 验证成功获取session信息
    # request.session相当于字典
    username = request.session.get('username')
    print(username)
    # 3. 返回响应
    return HttpResponse('get_session')

3.7 从http协议角度理解session的流程

  • 第一次请求:
  1. 第一次请求,在请求头中没有携带任何cookie信息
  2. 我们在设置session的时候,session会做2件事.
  • 第一件∶将数据保存在数据库中
  • 第二件∶设置一个cookie信息﹐这个cookie信息是以sessionid为key value为xxxx
  • cookie肯定会以响应的形式在响应头中出现
  • 第二次及其之后的:
  1. 都会携带cookie信息,特别是sessionid

3.8 清除所有session的值部分

清除所有session在存储中的值部分。

语法:

request.session.clear()

3.9 清除所有session的整条数据

清除所有session在存储中的整条数据。

语法:

request.session.flush()

3.10 清除指定session的键及值

删除session中的指定键及值,在存储中只删除某个键及对应的值。

语法:

del request.session['键']

3.11 设置session的有效期

语法:

request.session.set_expiry(value)
  • 如果value是一个整数,session将在value秒 没有活动后过期。
  • 如果value为0,那么用户session的Cookie将在用户的浏览器关闭时过期。
  • 如果value为None,那么session有效期将采用系统默认值, 默认为两周,可以通过在settings.py中设置SESSION_COOKIE_AGE来设置全局默认值。

相关文章
|
11天前
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
47 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
7天前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session
|
23天前
|
前端开发 JavaScript 数据库
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
|
25天前
|
监控 安全 中间件
Python Django 后端架构开发: 中间件架构设计
Python Django 后端架构开发: 中间件架构设计
21 1
|
19天前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
60 0
|
23天前
|
SQL Shell API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
|
23天前
|
Linux Shell 数据库
python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装、基本命令、视图与网站
|
4月前
|
前端开发 数据库 Python
Python Web 开发: 解释 Django 框架的 MVC 架构是什么?
Python Web 开发: 解释 Django 框架的 MVC 架构是什么?
102 0
|
4月前
|
存储 关系型数据库 MySQL
Python Django框架下将MySQL数据库的内容在网页上动态展示(修订版-2021-05-17)
Python Django框架下将MySQL数据库的内容在网页上动态展示(修订版-2021-05-17)
30689 0
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。