Django-使用会话session、配置存储方式

以下用到视图函数、序列化器、模板等在此链接中有定义使用

Django笔记-详解判断用户是否登录的几种方式(is_authenticated,LoginRequired Mixin,login_required )_simpleyako的博客-CSDN博客_django判断用户是否登录

一、打开会话

会话通过配置一个中间件实现。为了打开会话,需要做下面的操作:

  1. 通过 django-admin startproject 创建的默认 settings.py 文件
  2. 确保已经打开了 SessionMiddleware 这项设置的。
  3. 编辑设置中的 MIDDLEWARE,并确保他包含了 'django.contrib.sessions.middleware.SessionMiddleware'。

如果你不想使用会话功能,可以从配置的 MIDDLEWARE 中删除 `SessionMiddleware,并且从 INSTALLED_APPS 中删除 'django.contrib.sessions'。

 二、配置会话(session)引擎

django.conf.globals_settings.SESSION_ENGINE

1、使用数据库支持的会话

默认情况下,Django 在数据库里存储会话。虽然这很方便,但在一些设置里,在其他地方存储会话数据速度更快,因此 Django 还可以在文件系统或缓存中配置存储会话数据。

1)在setting中配置session会话引擎:

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

2)配置数据库的支持

如果你想使用数据库支持的会话,你需要在里INSTALLED_APPS中添加 'django.contrib.sessions' 。一旦在安装中配置,该应用,则我们再迁移模型表的时候,就会在配置的数据库中生成存储会话的表

 3)如果配置了数据库,且迁移了django自带的模型对象,则有数据库中一个存储session会话的表

 4)登录一个用户、查看基于数据库存储的会话

没有登录前

登录后 

 查看数据是否存储了当前用户的会话记录

 2、使用文件存储会话

1)在setting文件中配置文件会话的引擎

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

2)在setting文件中设置会话保存的路径

这里存储在当前项目目录下的tmp/文件夹下

SESSION_FILE_PATH ='tmp/'

3)登录查看

  3、使用cookie存储会话

使用cookie存储会话,数据的加密签名将使用 Django 的模块django.core.signingSECRET_KEY进行保存。关于该模块的详解Django-加密签名_simpleyako的博客-CSDN博客

1)在setting配置文件中配置cookie后端

SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"

2)在setting配置文件中定义密钥

以下是创建项目时django自定义创建的

SECRET_KEY = 'django-insecure-t)4b+p+u6_!0u+ih$&hldk73elfr6&sjsi0s7py(0ao64qec#q'

 3)登录查看

二、使用缓存会话

为了得到更好的性能,可以使用基于缓存的会话后端。使用 Django 的缓存系统来存储会话

1、基于Django自带缓存系统使用会话

 1)django默认的缓存配置(不用我们配置)

2)配置session会话引擎:

基于django自带的缓存系统,这里有两种配置session会话引擎的方式:

--------django.contrib.sessions.backends.cache:

设置 SESSION_ENGINE为 "django.contrib.sessions.backends.cache" 用于简单缓存会话存储。会话数据直接被存储在缓存里。然而,会话数据可能不是长久的:因为缓存满了或者缓存服务重启了,所以缓存数据会被收回。

--------django.contrib.sessions.backends.cache_db:

为了持久化缓存数据,设置 SESSION_ENGINE 为 "django.contrib.sessions.backends.cache_db" 。这使用直写式缓存——每次写入缓存的数据也会被写入到数据库。如果数据不在缓存中,会话仅使用数据库进行读取。

这两种会话存储都会非常快,但简单的缓存会更快,因为它忽视了持久化。在大部分情况下,cached_db后端已经足够快了,但如果你需要最后的一点性能,并且愿意时不时删除会话数据,那么cache后端更适合。 

2、基于redis缓存系统使用会话 

1)下载django_redis模块

pip install django_redis

2)自定义缓存系统

在setting中配置如下:

CACHES = {

    "session": {  # 自定义缓存后端名字
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://xxxxxxxxxx:6379/1", redis的地址以及使用第几号库
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": "xxx" #redis数据的密码
        }
    },
}

3)配置文件中指定会话缓存

至于django自带的缓存系统,在默认的配置文件中也有通过SESSION_CACHE_ALIAS='defaule'指定

指定我们自己定义的缓存后端 

SESSION_CACHE_ALIAS = "session"

 4) 指定会话后端

对于redis缓存,一般使用

django.contrib.sessions.backends.cache_db

5)至此,可以我们可以通过redis去存储会话

查看redis,现在没有数据

登录一个用户,可以看到redis中就存储着与当前用户的会话

 三、总结

1、django配置会话的后端

SESSION_ENGINE = "django.contrib.sessions.backends.db"
SESSION_ENGINE = "django.contrib.sessions.backends.cache" 
SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
SESSION_ENGINE = 'django.contrib.sessions.backends.file'

2、cookie的一些相关配置

# Cache to store session data if using the cache session backend.
SESSION_CACHE_ALIAS = "default" 
# Cookie name. This can be whatever you want.
SESSION_COOKIE_NAME = "sessionid" 
# Age of cookie, in seconds (default: 2 weeks).
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
# A string like "example.com", or None for standard domain cookie.
SESSION_COOKIE_DOMAIN = None
# Whether the session cookie should be secure (https:// only).
SESSION_COOKIE_SECURE = False
# The path of the session cookie.
SESSION_COOKIE_PATH = "/"
# Whether to use the HttpOnly flag.
SESSION_COOKIE_HTTPONLY = True
# Whether to set the flag restricting cookie leaks on cross-site requests.
# This can be 'Lax', 'Strict', 'None', or False to disable the flag.
SESSION_COOKIE_SAMESITE = "Lax"
# Whether to save the session data on every request.
SESSION_SAVE_EVERY_REQUEST = False
# Whether a user's session cookie expires when the web browser is closed.
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
# The module to store session data
SESSION_ENGINE = "django.contrib.sessions.backends.db"
# Directory to store session files if using the file session module. If None,
# the backend will use a sensible default.
SESSION_FILE_PATH = None
# class to serialize session data
SESSION_SERIALIZER = "django.contrib.sessions.serializers.JSONSerializer"

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值