我创建了一个身份验证后端:
from login.models import zUser
import hashlib
class AuthBackend:
def authenticate(self, username=None, password=None): #переписана функція для пошуку користувача в таблиці zusers
password = hashlib.md5(password).hexdigest() #хешування отриманого пароля в md5
try:
user = zUser.objects.get(userpass = password, login = username)
except zUser.DoesNotExist:
return None
return user
def get_user(self, user_id): #повернути користувача за id
try:
user = zUser.objects.get(id=user_id)
except zUser.DoesNotExist:
return None
return user
但在我看来,我打电话给auth.login(request, user)
,我有一个错误:
此模型中不存在以下字段,或者是m2m字段:last_login
def Login(request):
if request.method == 'POST':
username = request.POST.get('username') #введений логін
password = request.POST.get('password').encode('utf-8') #введений пароль
user = auth.authenticate(username = username, password = password)
if user is not None:
user_id = getattr(user, "userid") #отримання userid користувача
auth.login(request, user)
return redirect('/')
else:
return redirect('/') #перенаправлення на головну сторінку
else:
return render_to_response('index.html', context_instance=RequestContext(request))
然后我添加到设置:
AUTHENTICATION_BACKENDS = (
'login.auth_backends.AuthBackend',
'django.contrib.auth.ModelBackend'
)
但现在还有其他错误: 模块" django.contrib.auth.ModelBackend"没有定义" ModelBackend"属性/类
更新:这是我的zUser表
class zUser(models.Model): #модель користувача, створена по аналогії до таблиці zusers
userpass = models.CharField(max_length=50, blank=True)
telefon = models.CharField(max_length=25, blank=True)
remark = models.CharField(max_length=250, blank=True)
fio = models.CharField(max_length=50, blank=True)
userid = models.DecimalField(unique=True, max_digits=65535, decimal_places=65535, blank=True,primary_key=True)
changeonlogon = models.CharField(max_length=1, blank=True)
userlocked = models.CharField(max_length=1, blank=True)
login = models.CharField(max_length=300, blank=True)
#crypto = models.CharField(max_length=300, blank=True)
class Meta:
managed = False
db_table = 'zusers'