У меня есть сайт Django, на котором я показываю сообщение об успехе пользователю, когда он вошел в систему. Я делаю это с помощью сигнала, подобного этому:
def post_login_actions(sender, user, request, **kwargs):
messages.success(request, "Hello There. You're now logged in.")
user_logged_in.connect(post_login_actions, dispatch_uid="user_logged_in")
Это все прекрасно работает на сайте,Но он выдает ошибки, когда я запускаю тесты для проверки возможности входа в систему.Вот мой тест:
def test_home_loggedin(self):
c = Client()
c.login(username='MYEMAIL', password='MYPASSWORD')
response = c.get('/')
self.assertEqual(response.status_code, 200)
(я понимаю, что в этом примере нет ничего, чтобы проверить, вошел ли пользователь в систему.) Вот результат:
Traceback (most recent call last):
File "/Users/phil/Projects/RIG/projectname/django-projectname/projectname/tagger/tests/viewtests.py", line 34, in test_home_loggedin
c.login(username='MYEMAIL', password='MYPASSWORD')
File "/Users/phil/.virtualenvs/django-projectname/lib/python2.6/site-packages/django/test/client.py", line 516, in login
login(request, user)
File "/Users/phil/.virtualenvs/django-projectname/lib/python2.6/site-packages/django/contrib/auth/__init__.py", line 85, in login
user_logged_in.send(sender=user.__class__, request=request, user=user)
File "/Users/phil/.virtualenvs/django-projectname/lib/python2.6/site-packages/django/dispatch/dispatcher.py", line 172, in send
response = receiver(signal=self, sender=sender, **named)
File "/Users/phil/Projects/RIG/projectname/django-projectname/projectname/tagger/models/userprofile.py", line 234, in post_login_actions
messages.success(request, "Hello There. You're now logged in.")
File "/Users/phil/.virtualenvs/django-projectname/lib/python2.6/site-packages/django/contrib/messages/api.py", line 98, in success
fail_silently=fail_silently)
File "/Users/phil/.virtualenvs/django-projectname/lib/python2.6/site-packages/django/contrib/messages/api.py", line 26, in add_message
raise MessageFailure('Without the django.contrib.messages '
MessageFailure: Without the django.contrib.messages middleware, messages can only be added to authenticated users.
(Вы могли заметить, что яЯ передаю адрес электронной почты в качестве имени пользователя. Это потому, что я делаю что-то по этим линиям , чтобы использовать адреса электронной почты вместо имен пользователей. Я не думаю, это частьпроблема ...)
Я не уверен, что проблема здесь.Если я закомментирую вызов messages.success
, тогда тест выполняется нормально, и клиент успешно вошел в систему. Так почему он жалуется, что пользователь не аутентифицирован?