Django - проверять, аутентифицирован ли пользователь для каждого URL
В моем html я могу проверить, вошел ли пользователь, используя следующий синтаксис:
{% if user.is_authenticated %}
<div id="display_something">...</div>
{% else %}
<p>Please Log in</p>
{% endif %}
Но что мне делать, если я хочу проверить, проходит ли аутентификация пользователя для каждого html-файла, который я отображаю? Должен ли я скопировать и вставить это {% if ... %}
блок для каждого файла HTML? Как Django решает эту проблему? Какая хорошая практика?
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
но вы можете выбрать собственное имя переменной.
Вы не должны обрабатывать логику аутентификации в шаблоне (для всего сайта), вместо этого вы можете использовать декоратор login_required для ваших представлений.
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
...