Django - 检查用户是否对每个 url 进行了身份验证
Django - check if user is authenticated for every url
在我的 html 上,我可以使用以下语法检查用户是否已登录:
{% if user.is_authenticated %}
<div id="display_something">...</div>
{% else %}
<p>Please Log in</p>
{% endif %}
但是如果我想检查用户是否对我正在呈现的每个 html 文件进行了身份验证,我该怎么办?我是否必须为每个 html 文件复制并粘贴 {% if ... %}
块? Django 是如何处理这个问题的?什么是好的做法?
在您的 base.html
中添加支票
{% if user.is_authenticated %}
{% block page %}
{% endblock %}
{% else %}
<p>Please Log in</p>
{% endif %}
然后在所有其他页面的顶部添加 {% extends 'base.html' %}
。你需要给它一个 link 到 base.html
的相对值。
然后该页面上的其余代码需要位于如下标记之间。
{% block page %}
<!-- all your html code here -->
{% endblock %}
注意在block
之后,你需要有相同的名字。对于这个例子,它是 page
但你可以选择你自己的变量名。
您不应在模板中处理身份验证逻辑(针对整个站点),而是可以在您的视图中使用 login_required decorator。
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
...
在我的 html 上,我可以使用以下语法检查用户是否已登录:
{% if user.is_authenticated %}
<div id="display_something">...</div>
{% else %}
<p>Please Log in</p>
{% endif %}
但是如果我想检查用户是否对我正在呈现的每个 html 文件进行了身份验证,我该怎么办?我是否必须为每个 html 文件复制并粘贴 {% if ... %}
块? Django 是如何处理这个问题的?什么是好的做法?
在您的 base.html
中添加支票
{% if user.is_authenticated %}
{% block page %}
{% endblock %}
{% else %}
<p>Please Log in</p>
{% endif %}
然后在所有其他页面的顶部添加 {% extends 'base.html' %}
。你需要给它一个 link 到 base.html
的相对值。
然后该页面上的其余代码需要位于如下标记之间。
{% block page %}
<!-- all your html code here -->
{% endblock %}
注意在block
之后,你需要有相同的名字。对于这个例子,它是 page
但你可以选择你自己的变量名。
您不应在模板中处理身份验证逻辑(针对整个站点),而是可以在您的视图中使用 login_required decorator。
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
...