Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django测试-RequestFactory中的访问会话_Django_Django Testing_Django Tests - Fatal编程技术网

Django测试-RequestFactory中的访问会话

Django测试-RequestFactory中的访问会话,django,django-testing,django-tests,Django,Django Testing,Django Tests,我在Django测试中使用了RequestFactory,但找不到访问会话变量的正确方法,在尝试时出现以下错误 self.factory.\u会话[“zip\u id”]或self.factory.session[“zip\u id”] ====================================================================== ERROR: test_middleware (dj_geo.tests.IPToZipMiddleWareTest)

我在Django测试中使用了
RequestFactory
,但找不到访问会话变量的正确方法,在尝试时出现以下错误
self.factory.\u会话[“zip\u id”]
self.factory.session[“zip\u id”]

======================================================================
ERROR: test_middleware (dj_geo.tests.IPToZipMiddleWareTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "c:\dj_site_test\dj_geo\tests.py", line 36, in test_middleware
    assert self.factory._session["zip_id"] != None
AttributeError: 'RequestFactory' object has no attribute '_session'

----------------------------------------------------------------------



@override_settings(MIDDLEWARE_CLASSES=(
    'dj_geo.middleware.IPToZipMiddleWare'
))
class IPToZipMiddleWareTest(TestCase):

    def test_middleware(self):
        Zipcode.syncdb()
        assert Zipcode.objects.all().count() > 0

        self.factory = RequestFactory()
        self.request = self.factory.get('/', {}, **{'REMOTE_ADDR':'108.31.178.99'})
        assert self.factory._session["zip_id"] != None
        assert self.factory._session["zip_id"] != ""
您需要对此使用,而不是
RequestFactory

self.factory = Client()

您可能需要使用
SessionMiddleware
来处理请求,然后将其保存以存储会话。你可以参考这个。我也不认为直接访问工厂的受保护属性是一个好主意,像这样
self.factory.\u session[“zip\u id”]
,它只会让您遇到更多问题。祝你好运

使用中间件将会话信息保存到请求中

from django.contrib.sessions.middleware import SessionMiddleware

request = RequestFactory().get('/')
middleware = SessionMiddleware()
middleware.process_request(request)
request.session.save()