我正在忙着将一些身份验证逻辑提取到可重用的应用程序中。 在我的一些观看中,我重定向到主页。由于主页仅在"主机"中定义。 Django项目,我做了一个假的:
urlpatterns = patterns(
'',
url(r'^sign_up/', views.sign_up, name='sign_up'),
)
if settings.UNIT_TEST_SETTINGS:
def mock_home(request):
return HttpResponse('mock home view for redirects')
urlpatterns.append(url(r'^$', mock_home))
然而,我之前在提取之前通过的测试现在失败了, 因为请求上下文是无。
@patch('auth_backend.forms.KagisoUser', autospec=True)
def test_sign_up_post(self, MockKagisoUser): # noqa
mock_user = MockKagisoUser.return_value
mock_user.id = 1
mock_user.save.return_value = mock_user
data = {
'email': 'bogus@email.com',
'password': 'mypassword',
}
response = self.client.post('/sign_up/', data, follow=True)
message = list(response.context['messages'])[0].message <<< NoneType object is not subscriptable
assert response.status_code == 200
assert mock_user.save.called
正在测试的代码就是这个片段:
@never_cache
@csrf_exempt
def sign_up(request):
if request.method == 'POST':
form = forms.SignUpForm.create(
post_data=request.POST,
)
if form.is_valid():
try:
user = form.save()
except IntegrityError:
messages.error(request, 'my error message')
return HttpResponseRedirect(reverse('sign_in'))
_send_confirmation_email(user, request)
messages.success(request, 'Thanks for signing up)
return HttpResponseRedirect('/')
else:
form = forms.SignUpForm.create()
return render(
request,
'auth_backend/sign_up.html',
{'form': form},
)
这是我得到的错误:TypeError: 'NoneType' object is not subscriptable
。我挖了一点,整个上下文是无
为什么request.context
没有?
答案 0 :(得分:1)
如果帖子请求成功,您将重定向到您的视图mock_home
。
由于您要为此视图返回HttpResponse('mock home view for redirects')
,因此没有模板或模板上下文,因此request.context
为None
。