Hecko在那里,
我正在使用我选择调用Member的自定义用户模型,该模型扩展了默认用户模型(几乎与here所述相同)。
这就是打破了auth app的几个测试,因为测试夹具只创建了标准的用户,而不是成员。当我将缺少的成员定义/行添加到django / contrib / auth / fixtures / authtestdata.json时,它们会再次运行,但这当然没有解决方案。
这是我做错事的结果,我应该如何最好地修复它?
作为最后的办法,我只想在Buildout中为authtestdata.json添加补丁,但也许有更优雅的解决方案。
非常感谢,
Telofy
答案 0 :(得分:1)
根据http://docs.djangoproject.com/en/1.2/topics/auth/#storing-additional-information-about-users,您可以通过在settings.py中设置AUTH_USER_PROFILE参数获得一些乐趣。这是以Django可以使用的方式扩展标准用户模型的好方法。
答案 1 :(得分:1)
更新:请忽略我的帖子。使用自定义身份验证后端的the original version,并在django.contrib.auth.backends.ModelBackend
AUTHENTICATION_BACKENDS
中的自定义后端添加settings.py
作为第二个(后备)后端。它具有相同的效果,而且更简单。
我现在已经摆脱了补丁,而是在我的问题中扩展了我链接到的custom auth backend,如果在成员表中找不到用户,则可以使用原始身份验证后端的方法(我的自定义用户)。如果发生这种情况,则会发出警告(运行测试时可能会有点烦人)。此外,消息测试会导致很多异常,但它们似乎对测试没有任何负面影响。我希望他们是故意的。 ^^
# -*- encoding: utf-8 -*-
import logging
from django.conf import settings
from django.contrib.auth.backends import ModelBackend
from django.core.exceptions import ImproperlyConfigured
from django.db.models import get_model
logger = logging.getLogger(__name__)
# http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/
class CustomUserModelBackend(ModelBackend):
def authenticate(self, username=None, password=None):
try:
user = self.user_class.objects.get(username=username)
if user.check_password(password):
return user
except self.user_class.DoesNotExist:
user = super(CustomUserModelBackend, self).authenticate(username, password)
if user:
logger.warn("Using User, not Member: %s" % user)
return user
def get_user(self, user_id):
try:
return self.user_class.objects.get(pk=user_id)
except self.user_class.DoesNotExist:
user = super(CustomUserModelBackend, self).get_user(user_id)
if user:
logger.warn("Using User, not Member: %s" % user)
return user
@property
def user_class(self):
if not hasattr(self, '_user_class'):
self._user_class = get_model(*settings.CUSTOM_USER_MODEL.split('.', 2))
if not self._user_class:
raise ImproperlyConfigured('Could not get custom user model')
return self._user_class