2013-09-07 2 views
1

Я подклассифицирован из класса django User, чтобы создать свою собственную персонализированную версию. Класс User, о котором я могу говорить, это django.contrib.auth.models.User.Аутентификация пользователей, которые наследуются от класса пользователя django или django.contrib.auth.models.User

Это то, что он выглядит следующим образом:

from django.db import models 
from django.contrib.auth.models import User as Auth_User 


class User(Auth_User): 

    # User data 
    Age = models.IntegerField(blank=False, default=0) 
    middle_name = models.CharField(blank=True, max_length=255) 

    # Properties 
    @property 
    def full_name(self): 

     return str(self.first_name + ' ' + (self.middle_name + ' ' if self.middle_name else '') + self.last_name) 

    # Overridden functions 
    def __unicode__(self): 

     return self.full_name 

Пожалуйста, не то, что это упрощенная версия модели, имеется больше данных, что на самом деле не имеет отношения к этому вопросу.

Теперь, когда я пытаюсь для проверки подлинности с помощью обычных средств, его не удается:

def login(request): 

    if request.method == 'GET': 
     return render(request, "User/login.html") 

    if request.method == 'POST': 
     username = request.POST['username'] 
     password = request.POST['password'] 

     new_user = authenticate(username=username, password=password) 

     if new_user is not None: 
      if new_user.is_active: 
       login(request, new_user) 
     else: 
      print "User is not alive, he/she died! :(" 

     return HttpResponseRedirect('/users/') 

HTML, нет ничего особенного:

{% extends 'layout.html' %} 

{% block content %} 
    <form action="https://stackoverflow.com/users/login" method="post"> 
     {% csrf_token %} 
     <label for="username"> 
      Username: 
      <input type="text" name="username" id="username"/> 
     </label> 
     <label for="password"> 
      Password: 
      <input type="password" name="password" id="password"/> 
     </label> 
     <input type="submit" value="Submit"/> 
    </form> 
{% endblock %} 

Итак, как же я аутентифицировать мой User класс, подклассы из класса пользователя django?

+1

Вы пытались установить [AUTH_USER_MODEL] (https://docs.djangoproject.com/en/1.5/ref/settings/#auth-user-model) настройку? – alecxe

+0

@alecxe: Нет, у меня еще нет. Тем не менее, я участвую в этом процессе. –

+0

, когда вы говорите, что это терпит неудачу, 'authenticate' возвращает' None'? – karthikr

ответ

0

Убедитесь, что ваша модель находится в приложении, которое находится в вашем списке установленных приложений, Auth_USER_MODEL указан как @alecxe, и вы запустили синхронизацию db.

Если вы запустили синхронизацию db. Перед тем, как вы настраиваете новую модель пользователя, вам нужно будет уничтожить базу данных и запустить ее снова, пока ваша модель будет на месте. Это могло бы объяснить, почему кажется, что все работает, но это не .. Из docs:

Изменение AUTH_USER_MODEL имеет большое влияние на вашу структуру базы данных. Он изменяет доступные таблицы и влияет на построение внешних ключей и отношений «многие ко многим». Если вы намереваетесь установить AUTH_USER_MODEL, вы должны установить его перед созданием любых миграций или запуском manage.py migrate в первый раз.

Изменение этого параметра после создания таблиц не поддерживается makemigrations и приведет к необходимости вручную написать набор миграций для исправления вашей схемы.

Смежные вопросы