Каждый раз, когда я делаю запрос drf для доступа к свойствам пользователя, например:
def StatusView(request):
current_user = request.user
if current_user.is_anonymous:
return HttpResponse("none", content_type="text/plain")
# return HttpResponse(JsonResponse(Serialize_User(current_user)), content_type="text/plain")
# tmp = Serialize_User(current_user)
return HttpResponse("none", content_type="text/plain")
, получение ответа занимает до 10 секунд. Если я закомментирую эту строку if current_user.is_anonymous:
, запрос будет мгновенным. То же самое касается tmp = Serialize_User(current_user)
. Любой доступ пользователя занимает слишком много времени для обработки. Я изучил методы оптимизации, но отключение DEBUG
или предварительная выборка не помогают, так как мои модели не включают вложенные модели. Вот моя User
модель:
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
is_active = models.BooleanField(_('active'), default=True)
#avatar = models.ImageField(upload_to='avatars/', null=True, blank=True)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
def get_full_name(self):
'''
Returns the first_name plus the last_name, with a space in between.
'''
full_name = '%s %s' % (self.first_name, self.last_name)
return full_name.strip()
def get_short_name(self):
'''
Returns the short name for the user.
'''
return self.first_name
def email_user(self, subject, message, from_email=None, **kwargs):
'''
Sends an email to this User.
'''
send_mail(subject, message, from_email, [self.email], **kwargs)
Есть ли способ решить или отладить эту проблему?
Редактировать: Вот панель профилирования при использовании django панель инструментов отладки для StatusView
:
Call CumTime Per TotTime Per Count
- /debug_toolbar/panels/__init__.py in process_request(165)
10.320 10.320 0.000 0.000 1
- /django/core/handlers/exception.py in inner(31)
10.320 10.320 0.000 0.000 1
- /django/core/handlers/base.py in _get_response(85)
10.320 10.320 0.000 0.000 1
- /var/www/cnmb10a/cnmb10a/rest/auth_api/views.py in StatusView(69)
10.320 10.320 0.000 0.000 1
- /django/utils/functional.py in inner(254)
10.315 10.315 0.000 0.000 1
- /django/utils/functional.py in _setup(391)
10.315 10.315 0.000 0.000 1
- /django/contrib/auth/middleware.py in <lambda>(24)
10.315 10.315 0.000 0.000 1
- /django/contrib/auth/middleware.py in get_user(10)
10.315 10.315 0.000 0.000 1
- /django/contrib/auth/__init__.py in get_user(174)
10.315 10.315 0.000 0.000 1
- /django/contrib/auth/__init__.py in _get_user_session_key(56)
10.221 10.221 0.000 0.000 1
/django/contrib/sessions/backends/base.py in __getitem__(53)
10.221 10.221 0.000 0.000 1
Edit2: я попытался использовать систему баз данных по умолчанию, поставляемую с django, и она работает нормально, но как только я переключаюсь на базу данных mysql, размещенную на той же самой машина, все запросы, которые обращаются к нему, занимают 10 секунд. Я не знаю, где проблема, так как база данных работает нормально при совершении звонков через обычный php, или phpadmin, или терминал.