Skip to main content

The middleware detect if a client or the front reverse proxy server provides a X-Request-ID header, and get it as the request_id. If no such header is provided, it can provide a random value.

Project description

django-middleware-request-id

The middleware detect if a client or the front reverse proxy server provides a X-Request-ID header, and get it as the request_id. If no such header is provided, it can provide a random value.

Install

pip install django-middleware-request-id

Usage

pro/settings.py

INSTALLED_APPS = [
    "django_middleware_global_request",
    "django_middleware_request_id",
]

MIDDLEWARE = [
    ...
    "django_middleware_global_request.middleware.GlobalRequestMiddleware",
    "django_middleware_request_id.middlewares.DjangoMiddlewareRequestId",
    ...
]

app/views.py

from django.http import HttpResponse
from django_middleware_request_id import get_request_id

def get_request_id_view(request):
    request_id = get_request_id()
    return HttpResponse(request_id)

app/urls.py

from django.contrib import admin
from django.urls import path
froml . import views

urlpatterns = [
    path('get_request_id', views.get_request_id_view),
]

Set the request id at nginx

http {
    ...
    # -------------------------------------------------------------------------------
    # Set variable $reqid.
    # If you trust client or front nginx's header, you can use `map block` here.
    # -------------------------------------------------------------------------------
    map $http_x_request_id $reqid {
        default $http_x_request_id;
        "" $request_id;
    }
    # -------------------------------------------------------------------------------

    server {

        # -------------------------------------------------------------------------------
        # If you don't trust client and front nginx's header, or you are sure this 
        # is the first front nginx, just set the variable $reqid to a new random value.
        # Use `map block` above, or use `set line` below, but don't use both.
        # Uncomment the `set line` below to `set new random value`.
        # -------------------------------------------------------------------------------
        # set $reqid $request_id;
        # -------------------------------------------------------------------------------

        ...
        location /api/ {
            proxy_pass http://backend/api/;
            proxy_set_header X-Request-Id $reqid;
            ...
        }
        ...
    }
}

Test Passed

  • python27:~=django1.11.29
  • python34:~=django1.11.29
  • python34:~=django2.0.13
  • python35:~=django1.11.29
  • python35:~=django2.0.13
  • python35:~=django2.1.15
  • python35:~=django2.2.28
  • python36:~=django2.0.13
  • python36:~=django2.1.15
  • python36:~=django2.2.28
  • python36:~=django3.0.14
  • python36:~=django3.1.14
  • python36:~=django3.2.21
  • python37:~=django2.0.13
  • python37:~=django2.1.15
  • python37:~=django2.2.28
  • python37:~=django3.0.14
  • python37:~=django3.1.14
  • python37:~=django3.2.21
  • python38:~=django2.0.13
  • python38:~=django2.1.15
  • python38:~=django2.2.28
  • python38:~=django3.0.14
  • python38:~=django3.1.14
  • python38:~=django3.2.21
  • python38:~=django4.0.10
  • python38:~=django4.1.11
  • python38:~=django4.2.5
  • python39:~=django2.0.13
  • python39:~=django2.1.15
  • python39:~=django2.2.28
  • python39:~=django3.0.14
  • python39:~=django3.1.14
  • python39:~=django3.2.21
  • python39:~=django4.0.10
  • python39:~=django4.1.11
  • python39:~=django4.2.5
  • python310:~=django2.1.15
  • python310:~=django2.2.28
  • python310:~=django3.0.14
  • python310:~=django3.1.14
  • python310:~=django3.2.21
  • python310:~=django4.0.10
  • python310:~=django4.1.11
  • python310:~=django4.2.5
  • python311:~=django2.2.28
  • python311:~=django3.0.14
  • python311:~=django3.1.14
  • python311:~=django3.2.21
  • python311:~=django4.0.10
  • python311:~=django4.1.11
  • python311:~=django4.2.5

Releases

v0.1.0

  • First release.

v0.1.2

  • Fix problem that import get_request_id from the package root.
  • Fix problem that NOT using DJANGO_REQUEST_ID_HEADER setting.
  • Fix problem that call get_request_id() from none request context.

v0.1.3

  • Doc update.

v0.1.4

  • Unit test all passed.

v0.1.5

  • Add unit test for python-12 and django-5.0.6.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-middleware-request-id-0.1.5.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file django-middleware-request-id-0.1.5.tar.gz.

File metadata

File hashes

Hashes for django-middleware-request-id-0.1.5.tar.gz
Algorithm Hash digest
SHA256 d8a1ce5aa2e328be37076a618fbd13495ef3cd42b9530b51a0529b85dac28fc6
MD5 1f815114b50b02deb932c8b0c98a61ab
BLAKE2b-256 c3b5ac87763ef3161baec5889f153ed656a8e830afedabf9e0d2a8af16784715

See more details on using hashes here.

File details

Details for the file django_middleware_request_id-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for django_middleware_request_id-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 022e1cee814f63e8f96433b9eff024fdbd7fe5def0bdbc4553ec4483009359b0
MD5 16eefb7828d928faab730a8959fa0ead
BLAKE2b-256 9584bfa363aaba19bf42ec0d0d355a01c2e74afead62c608fd44575f34d2c9cd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page