django_webtest中的用户身份验证

Mar*_*oni 3 django django-testing

我的模板中有以下代码:

<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>
Run Code Online (Sandbox Code Playgroud)

如您所见,它显示不同的链接取决于用户是否登录.如果我用手测试它,它工作正常,但当我尝试使用以下代码测试它时:

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.")
Run Code Online (Sandbox Code Playgroud)

login()返回True,但测试失败.我为home对象调用了showbrowser()并看到,返回的页面看起来像匿名用户的页面 - 它包含注册和登录的链接以及设置和注销的链接.

在模板中使用*request.user.is_authenticated*来检查用户是否经过身份验证是否正确?为什么模板没有看到用户从测试中注册

谢谢!

Spi*_*ike 12

基于你的其他问题,我猜你正在使用django_webtest.如果是这样,您可以为请求指定要以哪个用户身份登录.因此,要以"Test"用户身份访问主页,您可以:

home = self.app.get('/', user='Test')
Run Code Online (Sandbox Code Playgroud)