Задать вопрос
@nurzhannogerbek

Джанго видит адрес переадресации по умолчанию. Как исправить?

Здравствуйте! Помогите пожалуйста исправить очень странную проблему.

В своем Джанго проекте я не использую админку из коробки, а создал собственную, кастомную. Использую авторизацию из django.contrib.auth для страницы входа администратора. Внизу вы можете увидеть файл urls.py, где указал параметр next. Проверял, все работает. После успешной авторизации администратора перебрасывает на адрес указанный в next (/administration/dashboard/).

Написал юнит тест. Выдает ошибку на assertRedirects. Из ошибки можно понять, что Джанго выдает адрес переадресации, который обычно стоит по умолчанию (/accounts/profile/). Почему юнит тест не видет настройки в urls.py?

Проблема исчезает только если добавить в настройки подобную запись LOGIN_REDIRECT_URL = '/administration/dashboard/'. Использовать данную запись я не могу, так как LOGIN_REDIRECT_URL в будущем будет использоватся для страницы авторизации для простых пользователей.

Как решить данную странную проблему?

urls.py:
from django.contrib.auth import views as authentication_views

urlpatterns = [
    # Administration Login
    url(r'^login/$',
        authentication_views.login,
        {
            'template_name': 'administration/login.html',
            'authentication_form': AdministrationAuthenticationForm,
            'extra_context': {
                'next': reverse_lazy('administration:dashboard'),
            },
            'redirect_authenticated_user': True
        },
        name='administration_login'),
]


tests.py:
class AdministrationViewTestCase(TestCase):
    def setUp(self):
        self.client = Client()
        self.credentials = {'username': 'user', 'password': 'password'}
        self.user = User.objects.create_user(**self.credentials)

    def test_administration_authorization(self):
        self.assertTrue(self.user)

        logged_in = self.client.login(**self.credentials)
        self.assertTrue(logged_in)

        response = self.client.post(
            reverse("administration:administration_login"),
            follow_redirects=True
        )
        self.assertEqual(response.status_code, 302)
        self.assertRedirects(
            response,
            reverse("administration:dashboard"),
            status_code=302,
            target_status_code=200
        )


ERROR:
Traceback (most recent call last):
  File "/home/nurzhan/CA/administration/tests.py", line 58, in test_administration_authorization
    target_status_code=200
  File "/srv/envs/py27/lib/python2.7/site-packages/django/test/testcases.py", line 324, in assertRedirects
    % (path, redirect_response.status_code, target_status_code)
AssertionError: Couldn't retrieve redirection page '/accounts/profile/': response code was 404 (expected 200)
  • Вопрос задан
  • 496 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы