Страницы

Поиск по вопросам

четверг, 20 июня 2019 г.

Проверка автризации в urls.py

Хочу полностью закрыть сайт для не авторизованных.. Подскажите что не так?
Django==1.9.6 urls.py
from django.conf.urls import url from django.contrib import admin from . import views
from django.contrib.auth.models import User
if User.is_authenticated: urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', views.home_page), ] else: urlpatterns = [ url(r'^admin/', admin.site.urls), ]


Ответ

Чтобы "пометить" какой-то url или группу url'ов, как требующие авторизации, можно воспользоваться декоратором:
urls.py
from django.contrib.auth.decorators import login_required
urlpatterns = [ ... url(r"^select2/fields/auto.json$", login_required(AutoResponseView.as_view()), name="django_select2-json"), ... ]
Если хочется закрыть весь сайт от неавторизованных пользователей, то стоит использовать middleware. Например, таким:
middleware.py
from django.http import HttpResponseRedirect from django.conf import settings from re import compile
EXEMPT_URLS = [compile(settings.LOGIN_URL.lstrip('/'))] if hasattr(settings, 'LOGIN_EXEMPT_URLS'): EXEMPT_URLS += [compile(expr) for expr in settings.LOGIN_EXEMPT_URLS]
class LoginRequiredMiddleware: if not request.user.is_authenticated(): path = request.path_info.lstrip('/') if not any(m.match(path) for m in EXEMPT_URLS): return HttpResponseRedirect(settings.LOGIN_URL)
Его надо прописать в MIDDLEWARE_CLASSES:
settings.py
MIDDLEWARE_CLASSES = [ ... appname.middleware.LoginRequiredMiddleware, ... ]

Комментариев нет:

Отправить комментарий