Django入门与实践-第17章:保护视图

    欢迎来到本系列教程的第5部分,在这节课,我们将学习如何保护视图防止未登录的用户访问,以及在视图和表单中访问已经登录的用户,我们还将实现主题列表和回复列表视图,最后,将探索 Django ORM 的一些特性和数据迁移的简单介绍。

    我们必须保护视图防止那些未认证(登录)的用户访问,下面是发起一个新话题的页面

    在上图中,用户还没有登录,尽管他们可以看到页面和表单。Django 有一个内置的 视图装饰器 来避免它被未登录的用户访问:

    boards/views.py()

    5-3.png

    注意查询字符串 ?next=/boards/1/new/ ,我们可以改进登录模板以便利用 next 变量来改进我们的用户体验,(译注:实际上这步操作不加也没问题)

    templates/login.html (查看完整内容)

    现在尝试登录,登录成功后,应用程序会跳转到原来所在的位置。

    现在添加一个测试用例确保主题发布视图被 装饰器保护了,不过,我们还是先来重构一下 boards/tests/test_views.py 文件。

    test_views.py拆分成3个文件:

    • test_view_home.py 包含 HomeTests 类 ()
    • test_view_new_topic.py 包含 NewTopicTests 类(完整代码

    重新运行测试,确保一切正常。

    现在在 test_view_new_topic.py 中添加一个新测试用例,用来检查试图是否被@login_required保护:

    boards/tests/test_view_new_topic.py ()