我的站点允许个人在没有登录的情况下通过基于当前SESSION_KEY创建用户来贡献内容

我想为我的视图设置一个测试,但似乎无法修改请求.会议:

我想这样做:

from django.contrib.sessions.models import Session
s = Session()
s.expire_date = '2010-12-05'
s.session_key = 'my_session_key'
s.save()
self.client.session = s
response = self.client.get('/myview/')

但我得到的错误是:

AttributeError: can't set attribute

如何在发出get请求之前修改客户端会话?

推荐答案

这就是我是如何做到的(灵感来自于http://blog.mediaonfire.com/?p=36中的一个解决方案).

from django.test import TestCase
from django.conf import settings
from django.utils.importlib import import_module

class SessionTestCase(TestCase):
    def setUp(self):
        # http://code.djangoproject.com/ticket/10899
        settings.SESSION_ENGINE = 'django.contrib.sessions.backends.file'
        engine = import_module(settings.SESSION_ENGINE)
        store = engine.SessionStore()
        store.save()
        self.session = store
        self.client.cookies[settings.SESSION_COOKIE_NAME] = store.session_key

之后,您可以将测试创建为:

class BlahTestCase(SessionTestCase):

    def test_blah_with_session(self):
        session = self.session
        session['operator'] = 'Jimmy'
        session.save()

等等.

Django相关问答推荐

使用序列化器获取Django ORM auth_user. id数据

Django后端对印前判断请求未通过访问控制判断给我以下回应:否访问控制允许来源

Django:我的上下文变量不能用于重复的for循环

新的 Django 开发人员无法在网站上显示Hello World,而不是默认安装成功页面

来自日历的 Django 动态 url

Django - 是否可以为查询集预取单个字段的多个过滤器?

"" 需要有字段 "id" 的值才能使用这种多对多关系

django 管理员登录突然要求 csrf 令牌

Django:在模板中显示当前语言环境

Django 密码以什么格式存储在数据库中?

断开模型的信号并在 django 中重新连接

django 复数模板

使用 Python / Django 的 Google API 示例的 Oauth

Python:获取异常的错误消息

Django 国际化语言代码

整数的Python正则表达式?

Django manage.py:在其依赖之前应用迁移

在 Django 中使用邮箱地址或用户名登录用户

AUTH_USER_MODEL 指的是尚未安装和创建的模型 .. AbstractUser 模型无法登录

在 Django 中使用 select_related Select 特定字段