request.user失去的是自定义model
#models.py 自定义的model
class MyUser(models.Model):
username = models.CharField(max_length=32, verbose_name=u'用户名')
is_superuser = models.BooleanField(default=False, verbose_name=u'是否是超级用户')
is_active = models.BooleanField(default=False, verbose_name=u'激活')
password = models.CharField(max_length=128, verbose_name=u'密码')
created = models.DateTimeField(auto_now_add=True, verbose_name=u'创建时间')
last_login= models.DateTimeField(auto_now=True, verbose_name=u'更新时间')
def __unicode__(self):
return self.username
def is_authenticated(self):
return True
def hashed_password(self, password=None):
if not password:
return self.password
else:
return hashlib.md5(password).hexdigest()
def check_password(self, password):
if self.hashed_password(password) == self.password:
return True
return False
class Meta:
verbose_name = _(u'管理员')
verbose_name_plural = _(u'管理员')
#auth.py 定义一个后端器,用于说明后端验证机制用到得是MyUser自定义model
class MyBackend:
def authenticate(self, username=None, password=None):
try:
user = MyUser.objects.get(username=username)
except MyUser.DoesNotExist:
pass
else:
if user.check_password(password):
return user
return None
def get_user(self, user_id):
try:
return MyUser.objects.get(pk=user_id)
except MyUser.DoesNotExist:
return None
#settings.py 配置后端器
AUTHENTICATION_BACKENDS = (
'myapp.auth.MyBackend',
)