【发布时间】:2015-09-16 06:29:11
【问题描述】:
我有一个主页,我想在用户未登录时显示登录表单,或者如果他/她已经登录,则显示属于该用户的项目列表。
到目前为止,我想出了两种方法:
-
检查用户是否在views.py中被认证并渲染相应的视图(在我的views.py中):
if request.user.is_authenticated(): return render(request, 'items.html') else return render(request, 'login.html') -
直接在模板中检查并为每种情况生成相应的HTML(在我的index.html中):
{% if user.is_authenticated %} HTML for my items list {% else %} HTML for my login form {% endif %}
问题
那么哪种方法更适合处理这个问题?这些方法的性能差异很大吗?是否有我们应该在 views.py 或模板本身中处理这些的任何标准?
【问题讨论】:
-
我会将逻辑保留在视图中,并使用单独的特定页面模板进行身份验证(登录/注销)。这不仅更干净,而且允许您在用户尝试直接匿名访问资源时重定向用户。在这种情况下,您可以将它们重定向到登录页面,添加一个 url 参数,该参数将用于在它们成功验证后将它们带回资源页面。
-
老实说,我更喜欢第一种方法,因为这样我的代码更干净。但是性能呢?直接在模板中移动检查和生成视图会为后端节省一些负载吗?
-
在我看来,中间件更适合那个任务:middleware example
-
如果你想为不同的用户状态呈现一个完全不同的页面,第一个可能会起作用。但是,如果您只想更改页面的一部分怎么办?在导航栏上说登录下拉菜单?
-
是的,确切地说,只更改页面的一小部分,我仍在模板内使用 user.is_authenticated。但我的问题是主要呈现整个页面,将这些模板分开用于不同目的会更干净
标签: python django model-view-controller django-templates