#python #django #django-rest-framework
Вопрос:
class logEngine:
def logger(request):
t1 = time.time()
params = {'user': request.user.username,
'ip_address': socket.gethostbyname(socket.gethostname()),
'process_time': time.time() - t1,
}
return params
когда я использую request.user.username (который приведен в большинстве примеров в Интернете), я получаю следующую ошибку,
Ошибка атрибута: объект «logEngine» не имеет атрибута «пользователь»
Пожалуйста, предложите любой другой способ
Комментарии:
1. Что
logEngine
должно быть? Промежуточное ПО? Также этот методlogger
должен приниматьсяself
в качестве первого аргумента (похоже, вы даже не передаете ему запрос, иначе вы получили бы ошибку типаTypeError: logger() takes 1 positional argument but 2 were given
2. logEngine-это класс, который я создал, чтобы указать имя пользователя, ip, время процесса. Возвращаемые значения из logEngine().logger() передаются в другую функцию. Кроме того, я использовал self. Но он также возвращает ту же ошибку
3. Вы также должны предоставить другие модели. Непонятно, почему django пытается получить менеджер пользователей из модели logEngine вместо встроенной модели пользователя здесь. И, возможно, вы сможете получить необходимые данные, фактически не используя модель logEngine. Поэтому уточните, является ли использование модели logEngine обязательным.
4. @yuv logEngne не является обязательным. Просто нужно захватить текущего пользователя, вошедшего в систему.
5. Затем удалите
logEngine
, и командаrequest.user.username
должна работать, если вы не перепутали настройки аутентификации Django.
Ответ №1:
Я нашел решение. Сейчас все работает нормально
customdblogger_views.py
import socket
import time
import logging
from urllib import request
class logEngine:
def logger(self, request):
t1 = time.time()
params = {'user': request.user.username,
'ip_address': socket.gethostbyname(socket.gethostname()),
'process_time': time.time() - t1,
}
return params
def django_logger(self):
django_logger = logging.getLogger('db')
return django_logger
views.py
# Create your views here.
import logging
import sys
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.views import APIView
from CustomDBLogger.customdblogger_views import logEngine
from rest_framework import viewsets, status
from rest_framework.decorators import action
db_logger = logging.getLogger('db')
class Request(viewsets.GenericViewSet):
attributes = logEngine()
@action(detail=True)
def test_api_method(self, request):
params2 = {
'class_name': __class__.__name__,
'method_name': sys._getframe().f_code.co_name,
'module_name': __name__,
}
v1 = self.attributes.logger(request)
params2.update(dict(v1))
db_logger.info("Successfully entered into function", extra=params2)
try:
1 / 0
except Exception as e:
db_logger.exception(e, extra=params2)
return Response({'data': True}, status=status.HTTP_200_OK)
finally:
db_logger.info("exited from the function", extra=params2)