使用 django request.META 添加一个新的 Http header
Append a new Http header using django request.META
我正在使用 django-rest 框架,我能够使用以下 META 信息获取和设置自定义 headers,
class log_middleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self,request):
# set thread local values
# This will execute before every request
correlation_id = request.META['HTTP_X_REQUEST_ID'] if 'HTTP_X_REQUEST_ID' in request.META else str(uuid.uuid4())
request.META['HTTP_X_REQUEST_ID'] = correlation_id
#logger.debug("Entered service")
response = self.get_response(request)
response['HTTP_X_REQUEST_ID'] = correlation_id
#logger.debug("Processed response")
return response
现在,在我的 views.py 中,我可以将此 header 作为 request.META['HTTP_X_REQUEST_ID']。它在响应 header
中可用
但是当我尝试使用以下配置在 uwsgi 中记录 http header 值时,它有“-”空值字段。因为 uwsgi 在 %var.XXX 变量中只有实际请求 headers 并且响应 headers 转到 %headers 并且它只显示计数和实际值。
问题:https://github.com/unbit/uwsgi/issues/1407
那么 django 有什么方法可以在实际请求 header 中附加数据而不是响应 header?
[uwsgi]
master = 1
memory-report = true
module = my_service.wsgi
http = 0.0.0.0:8080
max-requests = 50
processes = 16
log-format = { "ctime": "%(ctime)", "addr": "%(addr)", "method": "%(method)", "uri": "%(uri)", "correlation_id": "%(var.HTTP_X_REQUEST_ID)" }
但是如果我在从其余客户端实用程序发送请求本身时设置 header HTTP_X_REQUEST,同样的事情会起作用。
如果需要中间件,可以使用这个:
middlewares.py:
def add_header_middleware(get_response):
def middleware(request):
request.META['hello'] = 'world'
response = get_response(request)
response['world'] = 'hello'
return response
return middleware
views.py:
@api_view(['GET'])
def sample_view(request):
return Response(request.META['hello'])
settings.py:
MIDDLEWARE = [
# ...
'your_app.middlewares.add_header_middleware'
]
我正在使用 django-rest 框架,我能够使用以下 META 信息获取和设置自定义 headers,
class log_middleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self,request):
# set thread local values
# This will execute before every request
correlation_id = request.META['HTTP_X_REQUEST_ID'] if 'HTTP_X_REQUEST_ID' in request.META else str(uuid.uuid4())
request.META['HTTP_X_REQUEST_ID'] = correlation_id
#logger.debug("Entered service")
response = self.get_response(request)
response['HTTP_X_REQUEST_ID'] = correlation_id
#logger.debug("Processed response")
return response
现在,在我的 views.py 中,我可以将此 header 作为 request.META['HTTP_X_REQUEST_ID']。它在响应 header
中可用但是当我尝试使用以下配置在 uwsgi 中记录 http header 值时,它有“-”空值字段。因为 uwsgi 在 %var.XXX 变量中只有实际请求 headers 并且响应 headers 转到 %headers 并且它只显示计数和实际值。 问题:https://github.com/unbit/uwsgi/issues/1407
那么 django 有什么方法可以在实际请求 header 中附加数据而不是响应 header?
[uwsgi]
master = 1
memory-report = true
module = my_service.wsgi
http = 0.0.0.0:8080
max-requests = 50
processes = 16
log-format = { "ctime": "%(ctime)", "addr": "%(addr)", "method": "%(method)", "uri": "%(uri)", "correlation_id": "%(var.HTTP_X_REQUEST_ID)" }
但是如果我在从其余客户端实用程序发送请求本身时设置 header HTTP_X_REQUEST,同样的事情会起作用。
如果需要中间件,可以使用这个:
middlewares.py:
def add_header_middleware(get_response):
def middleware(request):
request.META['hello'] = 'world'
response = get_response(request)
response['world'] = 'hello'
return response
return middleware
views.py:
@api_view(['GET'])
def sample_view(request):
return Response(request.META['hello'])
settings.py:
MIDDLEWARE = [
# ...
'your_app.middlewares.add_header_middleware'
]