@sazhyk

Как сделать вход на сайт Django только после авторизации?

Здравствуйте. На работе потребовалось написать небольшой внутрикорпоративный сайт-портал. Так как в языках программирования не силен, то выбор пал на связку Python + Django. (Это мой личный выбор со взглядом в будущее, просьба не разводить вопросов о преимуществах/недостатках языков, CMS и т.д.) Суть будет такова: есть две группы пользователей - назовем их администраторы и пользователи. Собственно вопрос: как сделать так, чтобы при входе на сайт необходимо было пройти авторизацию, а уж после неё получить доступ к функциям сайта, которые определены в разделе группы/пользователи. Гугление приводит только на то, как организовать авторизацию уже после того как на сайт зашли.
Заранее спасибо.
  • Вопрос задан
  • 3030 просмотров
Пригласить эксперта
Ответы на вопрос 2
syschel
@syschel
freelance/python/django/backend
Принудительная авторизация:

project/middleware.py
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect

class ValidLogin(object):

    def process_request(request):
        if not request.user.is_authenticated():
            return HttpResponseRedirect(reverse('signin'))
        return None


project/settings.py
MIDDLEWARE_CLASSES = (
    'project.middleware.ValidLogin',
)


А раздача прав уже или на уровне url`ов или на уровне вьюх.
В урлах можно так

from django.conf.urls import patterns, url
from django.contrib.auth.decorators import user_passes_test
urlpatterns = patterns('crm.views',
    url(r'^$', 
        user_passes_test(lambda u: u.is_superuser or u.is_moderator)(HomeCRM.as_view()),
        name='home'),
)


Если просто авторизацию через урлы, то так:
from django.contrib.auth.decorators import login_required
urlpatterns = patterns('crm.views',
    url(r'^$', 
        login_required(HomeCRM.as_view()),
        name='home'),
)

Но это каждую строку урла проверять на авторизацию... А потом ещё думать как реализовать права по грппам. Проще как выше, через middleware авторизацию проверять и слать на форму входа.
Ответ написан
zigen
@zigen
Ну так покройте все url паттерны включая корневой @login_requireq
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы