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='...'
)