Аутентификация пользователя в django_webtest - PullRequest
3 голосов
/ 11 февраля 2012

У меня есть следующий код в моем шаблоне:

<div class="account">
{% if request.user.is_authenticated %}
    <a href="{% url settings %}"
       class="iconed username">{{ request.user.username }}</a>
    &nbsp;|&nbsp;
    <a href="{% url logout %}?next={{ request.path }}"
       class="iconed logout">{% trans "Logout" %}</a>
{% else %}
    <a href="{% url login %}?next={{ request.path }}" class="iconed login">{% trans "Login" %}</a>
    &nbsp;|&nbsp;
    <a href="{% url sign_up %}?next={{ request.path }}"
       class="iconed sign-up">{% trans "Sign up" %}</a>
{% endif %}
</div>

Как видите, разные ссылки зависят от того, вошел пользователь в систему или нет. Это работает нормально, если я проверяю это руками, но когда я пытаюсь проверить это с помощью следующего кода:

def test_home_logged_in(self):
    if self.client.login(username='Test', password='secret'):
        home = self.app.get('/')
        self.assertOK(home)
        self.assertContains(home, '/settings/')
        self.assertContains(home, '/logout/')
    else:
        self.fail("Couldn't log in.")

login () возвращает True, но тест не пройден. Я вызвал showbrowser () для домашнего объекта и вижу, что возвращенная страница выглядит как страница для анонимного пользователя - она ​​содержит ссылки для регистрации и входа в систему, кроме ссылок на настройки и выход из системы.

Правильно ли использовать * request.user.is_authenticated * в шаблоне для проверки подлинности пользователя? Почему шаблон не видит, что пользователь зарегистрировался с test ?

Спасибо!

Ответы [ 2 ]

12 голосов
/ 12 февраля 2012

На основании ваших других вопросов, я предполагаю, что вы используете django_webtest . Если это так, вы можете указать в запросе, какого пользователя вы хотите авторизовать. Таким образом, чтобы получить доступ к домашней странице в качестве пользователя «Test», вы должны сделать:

home = self.app.get('/', user='Test')
2 голосов
/ 11 февраля 2012

Это правильно, но вам нужно иметь django.core.context_processors.request в settings.TEMPLATE_CONTEXT_PROCESSORS, чтобы сделать request доступным из шаблонов.

...