Как зарегистрировать идентификатор запроса в промежуточном программном обеспечении Django?Python

Программы на Python
Ответить
Anonymous
 Как зарегистрировать идентификатор запроса в промежуточном программном обеспечении Django?

Сообщение Anonymous »

Я пишу код, как показано ниже, но он вызывает исключение
вот request_id_middleware.py

Код: Выделить всё

import uuid

from django.middleware.common import CommonMiddleware
from taiji.logger import logger

class RequestIDMiddleware(CommonMiddleware):
# pass
def process_request(self, request):
request.META['request_id'] = str(uuid.uuid4())
logger.info(f"start request id: {request.META['request_id']}")
return request

def process_response(self, request, response):
if request.META.get('request_id') is None:
response.headers['X-REQUEST-ID'] = request.META['request_id']
logger.info(f"finish request id: {response.headers['X-REQUEST-ID']}")
return response
logger.py

Код: Выделить всё

import logging

def set_logger(name):
logger=logging.getLogger(name)
handler=logging.StreamHandler()
handler.setLevel(logging.DEBUG)
fmt=logging.Formatter(fmt='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(fmt)
logger.addHandler(handler)
return logger

logger=set_logger('gg')
просмотры

Код: Выделить всё

def index(request: HttpRequest):
logger.info("hello world")
return JsonResponse("hello world")
но он мне скажет

Код: Выделить всё

Traceback (most recent call last):
File "E:\miniconda\envs\py312\Lib\wsgiref\handlers.py", line 137, in run
self.result = application(self.environ, self.start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:\miniconda\envs\py312\Lib\site-packages\django\contrib\staticfiles\handlers.py", line 80, in __call__
return self.application(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:\miniconda\envs\py312\Lib\site-packages\django\core\handlers\wsgi.py", line 124, in __call__
response = self.get_response(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:\miniconda\envs\py312\Lib\site-packages\django\core\handlers\base.py", line 141, in get_response
response._resource_closers.append(request.close)
^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'WSGIRequest' object has no attribute '_resource_closers'
[20/Apr/2024 22:32:59] "GET /index/ HTTP/1.1" 500 59
это правильный способ реализации промежуточного программного обеспечения?
почему оно вызывает ошибку WSGIRequest? это должна быть ошибка объекта, похожая на ответ
Любая помощь будет оценена

Подробнее здесь: https://stackoverflow.com/questions/783 ... middleware
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»