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):
    ...
Другие вопросы по тегам