Django 状态保持搭配与存储的实现

Django中的状态保持指的是让服务器在客户端与服务器之间保留一些信息,以便在不同请求之间共享。常用的状态保持机制有Cookie和Session。存储机制则指为了让状态保持持续生效,需要将这些信息存储在服务器的某个地方。

一、Cookie实现状态保持

Cookie是最常用的状态保持机制,在Django中使用起来也非常简单。当用户首次访问网站时,Django服务器会自动向用户的浏览器发送一个包含了唯一标识信息的Cookie。随后,用户的每一次请求都会带上这个Cookie,服务器通过解析Cookie中的标识信息来确定用户的身份。最后,服务器将需要保存的状态信息写入到Cookie中,发送给用户浏览器,实现状态保持。

实现过程:

第一步:设置和读取Cookie

# 设置Cookie
def set_cookie(request):
    response = HttpResponse('设置Cookie')
    response.set_cookie('username', 'admin')
    return response

# 读取Cookie
def read_cookie(request):
    username = request.COOKIES.get('username')
    return HttpResponse('读取Cookie成功,username=%s' % username)

上述代码中,set_cookie函数使用HttpResponse对象设置了名为username、值为admin的Cookie;read_cookie函数通过request.COOKIES.get方法读取了Cookie中的username值。

第二步:使用中间件处理Cookie

class MyMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        username = request.COOKIES.get('username')
        request.username = username
        response = self.get_response(request)
        response.set_cookie('username', username)
        return response

上述代码中,自定义了MyMiddleware中间件。在中间件中,读取并解析了Cookie中的username值,并将其赋值给了request对象的username属性。随后,调用get_response方法处理请求、生成响应,并在返回响应前,再次将username值写入到Cookie中。

二、Session实现状态保持

Session比Cookie稍微复杂一些,但也很容易使用。在Django中使用Session需要完成如下两个步骤:

  1. 添加Session到全局中间件
  2. 操作Session对象

实现过程:

第一步:添加中间件和Session配置

MIDDLEWARE = [
    # 添加Session中间件
    'django.contrib.sessions.middleware.SessionMiddleware',

    # 其他中间件...
]

# Session配置
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_COOKIE_NAME = 'mysite_session_id'  # 修改Session名称
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7  # 设置Session过期时间
SESSION_EXPIRE_AT_BROWSER_CLOSE = True  # 关闭浏览器后,Session自动过期

在代码中,我们添加了Django的Session中间件,并对其进行了配置,设置为使用数据库引擎,Session名称为mysite_session_id,过期时间为7天,关闭浏览器后Session自动过期。

第二步:使用Session

from django.shortcuts import render, redirect
from django.contrib.sessions.backends.db import SessionStore

def set_session(request):
    # 获取Session
    session = SessionStore(session_key=request.COOKIES.get('mysite_session_id'))

    # 设置Session
    session['username'] = 'admin'
    session.save()

    return HttpResponse('设置Session成功')

def read_session(request):
    # 获取Session
    session = SessionStore(session_key=request.COOKIES.get('mysite_session_id'))

    # 读取Session
    username = session.get('username')

    return HttpResponse('读取Session成功,username=%s' % username)

通过使用SessionStore对象,我们能够轻松地获取和操作Session。在上述代码中,我们首先通过SessionStore对象,获取了当前请求中的Session。随后,我们将username值写入了Session中,并将Session持久化。在读取Session时,我们同样使用了SessionStore对象,通过get方法获取了Session中的username值。

需要注意的是,每次使用Session时都需要通过request.COOKIES.get方法获取Cookie中的Session ID。因此,在代码实现时,我们可以提取这部分代码,放到中间件中进行处理,以达到代码复用的目的。

以上就是Django状态保持搭配与存储的实现攻略及示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django 状态保持搭配与存储的实现 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 使用Django2.0打造小程序助手

    打造个人助手 主角: Django2.0 微信小程序(2017年元旦发布) 技术要求: python3开发基础 Django开发基础 HTML+CSS+JS 开发环境: Python开发环境:Python3.5+pycharm 小程序开发环境:微信开发者工具 系统开发环境:Windows(开发)+linux(部署) 依赖环境&工具 Postman(模…

    Django 2023年4月9日
    00
  • Django+Ajax+Mysql实现数据库数据的展示

    最近老师让搞一个系统,仅仅展示一下数据库的数据 在做海底捞时,是交接的师兄的项目,用的语言是java,框架是SSM(Spring、SpringMVC、MyBatis),这次我准备用Python写,前端是从网上下载的免费的,修改的:https://blackrockdigital.github.io/startbootstrap-sb-admin-2/inde…

    2023年4月9日
    00
  • Django虚拟环境拷贝到另一台电脑,不能直接使用的问题

    最近折腾一个django的项目,想快速部署到服务器看看效果。virtualenv号称python三大神器之一,因此我打算把pycharm自动创建的虚拟环境直接拷贝到服务器运行代码。谁知出现了问题。   在pycharm上创建的虚拟环境是3.6.4 服务器环境上python3版本为3.6.9   按道理说,把本机的虚拟环境从本机拷贝到服务器,服务器就能直接运行…

    Django 2023年4月13日
    00
  • django中将views.py中的python方法传递给html模板文件

    常规的模板渲染 from django.db import models # Create your models here. class ArticalType(models.Model): caption = models.CharField(max_length=16) class Category(models.Model): caption = m…

    Django 2023年4月12日
    00
  • Django Auth用户与用户组

    Django是一款流行的Python Web框架,它提供了内置的认证(Auth)系统,可以方便地实现用户管理。Django Auth系统提供了两个核心的概念:用户(User)和用户组(Group),本文将详细介绍它们的使用方法。 用户(User) 用户(User)是Django Auth系统中的重要组成部分,它表示网站中的一个用户。每个用户由以下几个属性组成…

    Django 2023年3月12日
    00
  • django模板结构优化的方法

    当一个 Django 项目中的模板文件变得越来越多,结构越来越复杂时,优化模板结构变得尤为重要。下面是 Django 模板结构优化的方法。 1. 组织模板文件夹 将模板文件按照功能或模块划分到不同的文件夹中,让整个模板文件夹保留良好的结构和层次,使得模板文件在维护和更新时更加方便。例如,可以按照视图的功能划分文件夹,或者按照页面的类型划分文件夹: templ…

    Django 2023年5月16日
    00
  • Django笔记二十之手动编写migration文件

    本文首发于公众号:Hunter后端原文链接:Django笔记二十之手动编写migration文件 前面介绍过,migration 文件主要记录的是 Django 系统 model 的变化,然后通过 migrate 命令将变化适配到数据库中。 比如在某个 application 下新增了某张表,或者对某张表更改了字段,可以生成 migration 文件,然后通…

    2023年4月10日
    00
  • django高级应用(分页功能)

    django高级应用(分页功能) 1、原生分页应用 前端html代码 1 <!DOCTYPE html> 2 <html lang=”en”> 3 <head> 4 <meta charset=”UTF-8″> 5 <title>Title</title> 6 </head>…

    Django 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部