关于匿名用户的Django请求会话

时间:2018-04-24 03:31:25

标签: django python-2.7 django-rest-framework django-views

我有以下问题:

我正在使用Django Rest框架与匿名用户(我的应用程序中没有用户)和我的视图文件中当我尝试修改request.session变量时,值为并非在所有视图中持久化。我有两种不同的基于类的视图:

def post(self, request):
  ...
  request.session["instances"] = serializer.data 
  request.session.modified = True
  ...
  return Response(data, status=status.HTTP_200_OK)

def get(self, request, page):
  ...
  print request.session["instances"]
  ...
  return Response(data, status=status.HTTP_200_OK)

在第二个视图中,我得到一个关键错误,基本上是键"实例"不存在。这是我的设置文件:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'corsheaders',
]

MIDDLEWARE = [
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'corsheaders.middleware.CorsMiddleware',
]

SESSION_SAVE_EVERY_REQUEST = True

############
# SESSIONS #
############

# 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 non-RFC standard httpOnly flag (IE, FF3+, others)
SESSION_COOKIE_HTTPONLY = True
# 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'

#########
# CACHE #
#########

# The cache backends to use.
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    }
}
CACHE_MIDDLEWARE_KEY_PREFIX = ''
CACHE_MIDDLEWARE_SECONDS = 600
CACHE_MIDDLEWARE_ALIAS = 'default'

我无法成功地在request.session上存储数据,我尝试检查会话是否有session_key但是它打印None,所以我创建了一个会话session_id = request.session._get_or_create_session_key()的第一个视图,但仍然在第二个视图中,它不再存在(session_keyNone)。这里有人有这个问题吗?

0 个答案:

没有答案