【问题标题】:django manage.py test auth failsdjango manage.py 测试认证失败
【发布时间】:2009-07-06 18:14:38
【问题描述】:

当我运行 django 的测试套件时,我在 auth 应用程序上遇到错误。我(显然)没有编写任何身份验证代码,也没有为身份验证编写测试。但身份验证测试失败。这是我得到的一些错误,整个堆栈跟踪太大而无法放在这里: 以前有人处理过吗?

AttributeError: 'module' object has no attribute 'handler500'

DoesNotExist: UserProfile matching query does not exist.

----------------------------------------------------------------------
Ran 30 tests in 3.813s

FAILED (errors=17)
Destroying test database...

【问题讨论】:

    标签: django testing authentication


    【解决方案1】:

    我想通了。如果 auth 应用程序使用复杂的模板来呈现默认的 auth 模板视图,则会发生 auth 测试中的失败测试。 auth 应用程序使用您的应用程序使用的模板进行自我测试。我已将默认设置更改为与我网站的其他部分看起来相同的模板。

    我在模板中犯的错误:

    • auth 应用程序不知道的变量和反向 URL 的使用。 在我的情况下,身份验证模板中的用户个人资料信息(当您未登录时不可用)和错误的 url 反向标签导致身份验证应用程序测试出错。

    当我放弃所有在基本身份验证模板上无用的东西时,所有身份验证测试都再次成功。

    因此我又学到了一课:

    分离模板中的内容和结构很有用。这很容易通过创建一个 base.html 模板文件来完成,该文件只定义了一个基本的 html 页面 结构 并包含一堆内容块。请参阅下面的示例代码:

    下一步是创建一个 base_content.html,它扩展了 base.html 并且只定义了用于将内容呈现到页面中的 content 块。每个页面都需要基本的简单内容。

    在您的应用程序中,您扩展 base_content.html 并填充剩余的空内容块或用新内容块覆盖它们。 使用这种技术可以很容易地创建扩展 base_content.html 的认证模板 或 base.html 用于非常基本的身份验证模板,因此大部分(无用)内容都被遗漏了。

    示例 base.html

    <body>
    <div id="header">  
    {% block mainmenu %}{% endblock %}
    </div>
    <div id="userbar">
     {% block userbar %}{% endblock %}
    </div>
    <div id="bigcontent">
        {% block bigcontent %}{% endblock %}
    </div>
    </body>
    

    示例 base.content

      {% extends "base.html" %}
      {% load i18n %}
      {% block mainmenu %}
           ...content..
      {% endblock %}
    

    现在我的应用程序中的所有模板都扩展了基本内容模板,该模板的内容显示在每个页面上。 这样您就不会重复自己,并且您的模板代码会变得非常干燥,并且只需为您的身份验证视图使用 base.content 模板将使身份验证测试再次成功!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多