2014-12-07 19 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

相關問題