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

Eri*_*Kim 4 django django-authentication django-users

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

{% if user.is_authenticated %}
  <div id="display_something">...</div>
{% else %}
  <p>Please Log in</p>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

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

Bil*_*l F 5

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

{% if user.is_authenticated %}
  {% block page %}
  {% endblock %}
{% else %}
  <p>Please Log in</p>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

然后将所有其他页面添加{% extends 'base.html' %}到顶部。你需要给它一个到 的相对链接base.html。然后该页面上的其余代码需要位于如下标记之间。

{% block page %}
<!-- all your html code here -->
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

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


Joh*_*han 5

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

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...
Run Code Online (Sandbox Code Playgroud)