Django 在支持身份验证的情况下使用auth.login(错误)
我创建了一个身份验证后端:Django 在支持身份验证的情况下使用auth.login(错误),django,django-authentication,Django,Django Authentication,我创建了一个身份验证后端: from login.models import zUser import hashlib class AuthBackend: def authenticate(self, username=None, password=None): #переписана функція для пошуку користувача в таблиці zusers password = hashlib.md5(password).hexdigest()
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.loginrequest,user时,我有一个错误:
以下字段在此模型中不存在或是m2m字段:上次登录
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'
你想干什么?为什么要创建自定义身份验证后端和登录视图?您可以使用自定义用户模型,而无需重写后端和视图。你能发布你的zUser模型吗?你为什么要实现一个用户对象?Django可以很容易地使用自定义属性扩展现有的auth.User对象,例如telefon、userlocked等:Django如何知道db表中的属性“login”是自定义模型中的用户名?请阅读我发布的链接。它解决的第一个问题是:USERNAME\u字段:一个字符串,描述用户模型上用作唯一标识符的字段的名称。好的,那么同样的问题是如何处理密码:在db中是userpass,在model中是password