Вы можете просто унаследовать LoginRequiredMixin
и создать собственный миксин пользовательского доступа, как показано ниже:
class AccessMixin(LoginRequiredMixin):
def dispatch(self, request, *args, **kwargs):
if not request.user.is_authenticated or request.user.is_staff:
return self.handle_no_permission()
return super().dispatch(request, *args, **kwargs)
Теперь вам просто нужно наследовать AccessMixin
, как показано ниже:
class HomePageView(AccessMixin, TemplateView):
login_url = <login-url>
...
...
Таким образом, анонимный пользователь и штатный пользователь не смогут получить доступ к содержимому страницы.
Вы также можете упомянуть то же самое в своем базовом шаблоне html
Предположим, что вы создали base.html
, который расширяет блок content
, и вы можете добавить разрешение, как показано ниже:
Ex.
base.html
{% if user.is_authenticated %}
{% if user.is_staff %}
<h3>Not allowed to access this page</h3>
{% else %}
{% block content %} {% endblock %}
{% endif %}
{% endif %}
таким образом, когда вы расширяете base.html в своем шаблоне, весь контент, который вы пишете в {% block content %} {% endblock %}
, будет отображаться только для не вошедшего в систему пользователя.