【问题标题】:Django creating sessionsDjango 创建会话
【发布时间】:2015-12-22 17:34:13
【问题描述】:

我有一个启用会话中间件的现有 Django 应用程序。

当我查看代码时,我没有看到任何明确保存会话的地方(如下所示)以创建新会话。

request.session['foo'] = 'bar'

即使它没有明确保存,我仍然会看到创建用户后创建的会话对象。

是否有可能在创建用户后创建会话。该应用程序正在使用 django allauth 进行身份验证。

当我解码我的会话对象时,它看起来是这样的......

{u'_auth_user_backend': u'django.contrib.auth.backends.ModelBackend',
 u'_auth_user_hash': u'df0df84cd5f03676a8756c06fbe6816b9082773d',
 u'_auth_user_id': 21,
 u'otp_device_id': u'two_factor.models.PhoneDevice/30',
 u'wizard_login_view':
     {u'extra_data': {},
      u'step': None,
      u'step_data': {},
      u'step_files': {},
      u'validated_step_data': {}}}

【问题讨论】:

  • “已保存”是什么意思?
  • 它的意思是它创建而不是保存

标签: python django session


【解决方案1】:

创建后信号对此有好处:

from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.db import models
from django.contrib.sessions.backends.db import SessionStore

def write_session(sender, **kw):
    s = SessionStore()
    s['foo']="bar"
    s.save()
    s.session_key # gives '2b1189a188b44ad18c35e113ac6ceead'
    s = SessionStore(session_key='2b1189a188b44ad18c35e113ac6ceead')
    s['foo'] # gives "bar"

post_save.connect(write_session, sender=User, dispatch_uid="users-writesession-signal")

【讨论】:

  • 在 write_session 中你在哪里接受请求?
  • 不需要request,不是view。基本上 write_session 会在创建用户时收到信号。
  • 是的,但是你在write_session中写request.session['foo'] = 'bar',里面不包含request。
  • 抱歉,我已更改代码以满足您的需求。这是一个文档docs.djangoproject.com/en/1.9/topics/http/sessions
猜你喜欢
  • 2018-09-10
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2011-05-02
  • 2018-08-20
  • 1970-01-01
相关资源
最近更新 更多