【问题标题】:Django - check if user is authenticated for every urlDjango - 检查用户是否对每个 url 进行了身份验证
【发布时间】:2018-09-12 23:28:29
【问题描述】:
在我的 html 中,我可以使用以下语法检查用户是否已登录:
{% if user.is_authenticated %}
<div id="display_something">...</div>
{% else %}
<p>Please Log in</p>
{% endif %}
但是,如果我想检查用户是否对我正在呈现的每个 html 文件进行了身份验证,我该怎么办?我是否必须为每个 html 文件复制并粘贴 {% if ... %} 块? Django 处理这个问题的方式是什么?有什么好的做法?
【问题讨论】:
标签:
django
django-authentication
django-users
【解决方案1】:
在您的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,但你可以选择你自己的变量名。
【解决方案2】:
您不应该在模板中处理身份验证逻辑(针对整个网站),而是可以在您的视图上使用login_required decorator。
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
...