2014-12-07 21 views
1

这就是我“已经扩展用户模型:延长在Django用户模型后,我无法登录

class User(AbstractBaseUser): 
    email = models.EmailField(verbose_name='email',max_length=255,unique=True, db_index=True,) 
    username = models.CharField(verbose_name='username', max_length=255, unique=True) 
    first_name = models.CharField(verbose_name='first_name', max_length=255, blank=True) 
    last_name = models.CharField(verbose_name='last_name', max_length=255, blank=True) 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 
    objects = UserManager() 
    avatar = models.ImageField(upload_to='profile_images', blank=True) 

    USERNAME_FIELD = 'username' 
    REQUIRED_FIELDS = ['username'] 

    def get_full_name(self): 
     return '%s %s' % (self.first_name, self.last_name,) 

    def get_short_name(self): 
     return self.username 

    def __unicode__(self): 
     return self.email 

    def has_perm(self, perm, obj=None): 
     return True 

    def has_module_perms(self, app_label): 
     return True 

    @property 
    def is_staff(self): 
     return self.is_admin 

它的工作很好,但后新用户注册时,我不能与他的用户名登录。和密码 和我的数据库我现在有2代表与用户

AUTH_USER - 老用户

blog_user - 新的扩展用户

我只能从auth_user登录。

这就是我对登录在views.py:

@csrf_protect 
def loginn(request): 
    c = {} 
    c.update(csrf(request)) 
    return render_to_response("login/login.html", c) 


@csrf_protect 
def auth_view(request): 
    username = request.POST.get('username', '') 
    password = request.POST.get('password', '') 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      return render_to_response('login/loggedin.html',RequestContext(request)) 
    else: 
     return HttpResponseRedirect('/posts/invalid') 

那么,怎样才能用我的用户我新,扩展表登录?

回答

1

为了允许在authenticate()方法中使用自定义用户模型,Django需要设置AUTH_USER_MODEL设置。 https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model

对于示例代码,这将是AUTH_USER_MODEL = 'blog.User' settings.py内

authenticate()方法向get_user_model()呼叫肚里,如果AUTH_USER_MODEL设置被设定发现,然后使用它作为它的基地模型来验证。

请务必阅读有关替换Django中自定义用户模型的文档。在决定切换auth用户模型之前,您应该了解一些警告。

如果可能的话,我会建议扩展base auth用户模型,以包含任何应用程序特定的字段,因为看起来您仍然通过用户名登录用户。 https://docs.djangoproject.com/en/dev/topics/auth/customizing/#extending-the-existing-user-model

相关问题