2016-06-27 53 views
1

我试图建立一个自定义的用户模型,但尝试验证的成员Django的:不能导入名称check_password

ImportError at /members/login/ cannot import name check_password

我知道当我得到我的登录页面上出现以下错误check_password方法存在,但不知道我错过了什么。试图导入它时,我在做什么?

/members/backends.py

from django.conf import settings 
# failing to import check_password here 
from django.contrib.auth.models import check_password 
from members.models import Member 


class EmailAuthBackend(object): 
    """Custom authentication backend the allows users to log in using 
    their email address.""" 

    def authenticate(self, email=None, password=None): 
     """Authentication method.""" 
     try: 
      member = Member.objects.get(email=email) 
      if member.check_password(password): 
       return member 
     except Member.DoesNotExist: 
      return None 

mebers/views.py

from django.shortcuts import render_to_response, redirect 
from django.template import RequestContext 
from django.contrib.auth import login as django_login, authenticate, logout as django_logout 

from members.forms.login import LoginForm 
from members.forms.register import RegisterForm 

def login(request): 
    """Login view.""" 
    if request.method != 'POST': 
     form = LoginForm() 

    form = LoginForm(data=request.POST) 

    if form.is_valid(): 
     member = authenticate(email=request.POST.get('email'), 
           password=request.POST.get('password1')) 
     if member is not None: 
      if member.is_active: 
       django_login(request, member) 
       return redirect('/') 
    else: 
     form = LoginForm() 

    return render_to_response('members/login.html', { 
     'form': form 
    }, context_instance=RequestContext(request)) 
+0

你从1.9版本的django升级到1.9版本还是更高版本?它看起来像是从django.contrib.auth.models中删除了独立的check_password功能。它仍然可以(在1.9至少)从django.contrib.auth.hashers,但它可能是更好的调用用户对象的check_password方法。 – tbm

回答

0

你似乎关于函数和方法有点混乱。 check_password是auth.models.User类中的一个方法;你不能自己导入它。而且你不用它;你可以在你自己的成员类中调用 - 完全独立的 - check_password方法;没有必要在那里输入任何东西。

+3

至少最近在Django的1.8,check_password被实现为django.contrib.auth.hashers一个独立的方法,并导入到django.contrib.auth.models:从django.contrib.auth.hashers进口( check_password ,is_password_usable,make_password, ),所以你有点晦涩的答案是有点误置。 – tbm