codecamp

Django4.0 使用会话-在视图外使用会话

这部分的例子直接从 ​django.contrib.sessions.backends.db​ 后端导入 ​SessionStore​ 对象。在你自己的代码里,你应该考虑从 ​SESSION_ENGINE​ 指定的会话引擎导入 ​SessionStore ​。

>>> from importlib import import_module
>>> from django.conf import settings
>>> SessionStore = import_module(settings.SESSION_ENGINE).SessionStore

可以在视图外对会话数据进行操作的 API :

>>> from django.contrib.sessions.backends.db import SessionStore
>>> s = SessionStore()
>>> # stored as seconds since epoch since datetimes are not serializable in JSON.
>>> s['last_login'] = 1376587691
>>> s.create()
>>> s.session_key
'2b1189a188b44ad18c35e113ac6ceead'
>>> s = SessionStore(session_key='2b1189a188b44ad18c35e113ac6ceead')
>>> s['last_login']
1376587691

SessionStore.create()​ 用来创建一个新会话(即不从会话中加载,并带有 ​session_key=None​)。​save()​ 用来保存已存在的会话(即从会话存储中加载)。在新会话上调用 ​save()​ 也许会工作,但生成与现有会话相冲突的 ​session_key ​的概率很小。​create()​ 调用 ​save()​ 并循环,直到生成了未使用过的 ​session_key ​。
如果你正在使用 ​django.contrib.sessions.backends.db​ 后端,每个会话就会是一个普通的 Django 模型。 ​Session ​模型在 ​django/contrib/sessions/models.py​ 中定义。因为它就是一个普通模型,你可以使用普通的 Django 数据库 API 访问会话。

>>> from django.contrib.sessions.models import Session
>>> s = Session.objects.get(pk='2b1189a188b44ad18c35e113ac6ceead')
>>> s.expire_date
datetime.datetime(2005, 8, 20, 13, 35, 12)

注意你将需要调用 ​get_decoded()​ 来得到会话字典。这是必须的,因为字典是按照编码格式存储的:

>>> s.session_data
'KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj...'
>>> s.get_decoded()
{'user_id': 42}


Django4.0 使用会话-测试cookies设置
Django4.0 使用会话-当保存会话时
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Django4.0 模型和数据库

Django4.0 处理HTTP请求

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }