Защита веб-сайта от пользователей, не прошедших проверку подлинности

#django #django-views

#джанго #django-просмотры

Вопрос:

Когда пользователь не вошел в систему, он должен быть перенаправлен на страницу входа в систему.

 if not request.user.is_authenticated()
    # redirect to the login page
 

Но этот код должен быть написан в каждом представлении. Есть ли способ написать общий код для всех представлений только один раз?

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

1. Не могли бы вы выполнить проверку авторизации на уровне сервера, используя что-то вроде . htaccess ?

2. Нет, это должно быть сделано с помощью django

3. Вам следует взглянуть на книгу Джанго. Существует бесплатная онлайн-версия , если вам не нужна физическая копия. В нем есть хороший раздел о сеансах, пользователях и регистрации , в котором упоминается аккуратный декоратор, упомянутый в ответах.

Ответ №1:

Как насчет @login_required декоратора? https://docs.djangoproject.com/en/dev/topics/auth/#the-login-required-decorator

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

1. Обязательная ссылка на примечание о @login_required декораторе в книге Django .

Ответ №2:

Вы могли бы сделать это с помощью промежуточного программного обеспечения:

 class RequireLoginMiddleware(object):
    def process_request(self, request):
        if not request.user.is_authenticated():
            return HttpResponseRedirect('/login/')
        return None
 

Конечно, вы не хотите делать это для самой страницы входа:

 class RequireLoginMiddleware(object):
    def process_request(self, request):
        if request.path.startswith('/login'):
            return None
        if not request.user.is_authenticated():
            return HttpResponseRedirect('/login/')
        return None