авторизация в django - PullRequest
       24

авторизация в django

1 голос
/ 17 августа 2010

Я относительно новичок в django ..

В приложении, которое я создаю, есть несколько типов пользователей (т.е. User1, User2, User3), которые все наследуют от django.contrib.auth.models.User и при входе в систему каждый пользователь должен быть перенаправлен на страницу успеха в зависимости от того, к какому типу пользователей он относится.* is <class 'django.contrib.auth.models.User'>

В настоящее время я запускаю тесты с помощью «manage.py test» - аутентификация и перенаправления работают успешно для User1 и User2, однако не аутентифицируется для User3 и возвращает «fail2».html "шаблон.Все остальные тесты с User3 дали верные результаты.

Есть предложения?Это мой первый пост с вопросами, поэтому не стесняйтесь задавать вопросы, если я оставил соответствующую информацию!

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 17 августа 2010

Не совсем ответ на ваш вопрос, но почему бы не использовать профиль пользователя для определения ваших type и других данных, специфичных для классов UserX?Они просты в настройке, позволяют хранить дополнительную информацию о пользователе и позволяют продолжать использовать встроенные User объекты.

Классы профиля довольно просты (я поднял это из Книга Джанго, глава 12 ):

class MySiteProfile(models.Model):
    # This is the only required field
    user = models.ForeignKey(User, unique=True)

    # The rest is completely up to you...
    type = models.CharField(maxlength=100, blank=True)

Помимо этого, вы переходите на элемент в settings.py и установите триггер для автоматического создания профиля при создании User, и все готово.

Ваш результирующий код представления также будет значительно упрощен:

def login_attempt(request):
    user = request.user
    data = {}
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:    
        if user.is_active:
            login(request, user)
            type = user.get_profile().type

            return render_to_response (
                "templates/success_"+type+".html",
                data,
                context_instance=RequestContext(request)
            )

        else:
            return render_to_response (
                    "templates/fail1.html",
                    data,
                    context_instance=RequestContext(request)
                )
    else:
        return render_to_response (
                "templates/fail2.html",
                data,
                context_instance=RequestContext(request)
            )
0 голосов
/ 17 августа 2010

Это не совсем ответ на вашу проблему, но рассматривали ли вы возможность использования групп / разрешений для разграничения между различными типами пользователей вместо создания подклассов auth.User?Функция auth в Django поставляется с достаточно полезным механизмом групп / разрешений , который можно использовать для облегчения вашей жизни.

Используя группы, вы можете создавать различные группы («студент»)град и т. д.) и предоставить каждой группе соответствующие разрешения для достижения необходимого эффекта.

...