Python Django测试,变更请求

Python Django测试,变更请求,python,django,testing,Python,Django,Testing,我有一个秘密投票的中间件 class SecretBallotMiddleware(object): def process_request(self, request): request.secretballot_token = self.generate_token(request) def generate_token(self, request): raise NotImplementedError class SecretBallo

我有一个秘密投票的中间件

class SecretBallotMiddleware(object):
    def process_request(self, request):
        request.secretballot_token = self.generate_token(request)

    def generate_token(self, request):
        raise NotImplementedError


class SecretBallotIpMiddleware(SecretBallotMiddleware):
    def generate_token(self, request):
        return request.META['REMOTE_ADDR']


class SecretBallotIpUseragentMiddleware(SecretBallotMiddleware):
    def generate_token(self, request):
        s = ''.join((request.META['REMOTE_ADDR'], request.META.get('HTTP_USER_AGENT', '')))
        return md5(s.encode('utf8')).hexdigest()
我在我的观点中使用这个(例如“不同的观点”):

如何在测试中更改此令牌表单请求

class BasicTest(TestCase):
    def test_one(self):
        self.client.request['secretballot_token']='asd' #??
        response = self.client.post('/different_view/')

我想将此测试中的帖子发送到/different_view/,但要使用我自己的、已更改的令牌。

如果您希望在不运行中间件的情况下测试视图,可以使用
RequestFactory
生成请求并将其直接传递到您的视图中

def test_one(self):
    # create a request
    request = RequestFactory().post('/different_view')
    request.secretballot_token = 'asd'

    # function based view
    response = different_view(request)
    # class based view
    response = DifferentView.as_view()(request) 
如果需要随视图一起测试中间件,则应该在测试中传递HTTP头

def test_one(self):
    # pass http headers
    response = self.client.post(path='/different_view'/,
        REMOTE_ADDR='12.34.56.78',
        HTTP_USER_AGENT='...'
    )
def test_one(self):
    # pass http headers
    response = self.client.post(path='/different_view'/,
        REMOTE_ADDR='12.34.56.78',
        HTTP_USER_AGENT='...'
    )