django auth_user.get_profile

django 对 auth_user 提供了扩展get_profile(self),在django的auth/modles.py提供了如下方法

  def get_profile(self):
        """
        Returns site-specific profile for this user. Raises
        SiteProfileNotAvailable if this site does not allow profiles.
        """
        if not hasattr(self, '_profile_cache'):
            from django.conf import settings
            if not getattr(settings, 'AUTH_PROFILE_MODULE', False):
                raise SiteProfileNotAvailable('You need to set AUTH_PROFILE_MO'
                                              'DULE in your project settings')
            try:
                app_label, model_name = settings.AUTH_PROFILE_MODULE.split('.')
            except ValueError:
                raise SiteProfileNotAvailable('app_label and model_name should'
                        ' be separated by a dot in the AUTH_PROFILE_MODULE set'
                        'ting')

            try:
                model = models.get_model(app_label, model_name)
                if model is None:
                    raise SiteProfileNotAvailable('Unable to load the profile '
                        'model, check AUTH_PROFILE_MODULE in your project sett'
                        'ings')
                self._profile_cache = model._default_manager.using(self._state.db).get(user__id__exact=self.id)
                self._profile_cache.user = self
            except (ImportError, ImproperlyConfigured):
                raise SiteProfileNotAvailable
        return self._profile_cache
 

这段代码做了3件事情:

1. 从settings找到配置的'AUTH_PROFILE_MODULE

2. 加载model = models.get_model(app_label, model_name)

3. 通过id加载:model._default_manager.using(self._state.db).get(user__id__exact=self.id)

这个方法有一个问题,_default_manager只会从db中查询,如果我想通过memcached来查询怎么办呢?

猜你喜欢

转载自san-yun.iteye.com/blog/1605237
今日推荐