Django-检查是否对每个URL的用户进行身份验证

时间:2018-09-12 23:28:30

标签: django django-authentication django-users

在我的html上,我可以使用以下语法检查用户是否已登录:

{% if user.is_authenticated %}
  <div id="display_something">...</div>
{% else %}
  <p>Please Log in</p>
{% endif %}

但是,如果我要检查用户是否对我呈现的每个html文件进行身份验证,该怎么办?我是否必须为每个HTML文件复制并粘贴该{% if ... %}块? Django处理此问题的方式是什么?有什么好的做法?

2 个答案:

答案 0 :(得分:2)

在您的base.html中,添加支票

{% if user.is_authenticated %}
  {% block page %}
  {% endblock %}
{% else %}
  <p>Please Log in</p>
{% endif %}

然后与所有其他页面一起,在顶部添加{% extends 'base.html' %}。您需要为其提供一个指向base.html的相对链接。 然后,该页面上的其余代码需要位于下面的标记之间。

{% block page %}
<!-- all your html code here -->
{% endblock %}

请注意,在block之后,您需要使用相同的名称。对于此示例,它是page,但您可以选择自己的变量名。

答案 1 :(得分:1)

您不应该在模板中(对于整个站点)处理身份验证逻辑,而是可以在视图上使用login_required decorator

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...