Package: ddrr
Django Debug Requests & Responses (DDRR)Get more out of yourrunserverdevelopment output! Print request and response
headers, body (with pretty-printing), etc.  Highly customizable! Supports
Django 2.2+ and 3.0+, with Python 3.7+.Full request headersThe entire request bodyPretty-printing optionalColored outputSuper easy setupNo extra dependenciesDDRR can also be used for general logging with some configuration of your own.Installation$ pip install ddrrAdd"ddrr"toINSTALLED_APPSInsert"ddrr.middleware.DebugRequestsResponses"first inMIDDLEWAREDone!When you runrunserver, you'll now get the entire HTTP requests and
responses, including headers and bodies.If you don't like the default output format, read on...CustomizationDDRR={"ENABLE_REQUESTS":True,# enable request logging"ENABLE_RESPONSES":True,# enable response logging"LEVEL":"DEBUG",# ddrr log level"PRETTY_PRINT":False,# pretty-print JSON and XML"REQUEST_TEMPLATE_NAME":"ddrr/default-request.html",# request log template name"REQUEST_TEMPLATE":None,# request log template string (overrides template name)"RESPONSE_TEMPLATE_NAME":"ddrr/default-response.html",# response log template name"RESPONSE_TEMPLATE":None,# response log template string (overrides template name)"REQUEST_HANDLER":logging.StreamHandler(),# request log handler"RESPONSE_HANDLER":logging.StreamHandler(),# response log handler"ENABLE_COLORS":True,# enable colors if terminal supports it"LIMIT_BODY":None,# limit request/response body output to X chars"DISABLE_DJANGO_SERVER_LOG":False,# disable default django server log}Template contextsIf you want to customize request or response templates, you can use the following values:Request template context:ddrr.body- request bodyddrr.content_type- request content typeddrr.formatter- the formatterddrr.headers- mapping of header fields and valuesddrr.method- request methodddrr.path- request pathddrr.query_params- query parametersddrr.query_string- query stringddrr.record- the actual log record objectddrr.request- the actual request objectResponse template context:ddrr.content- response contentddrr.content_type- response content typeddrr.formatter- the formatterddrr.headers- mapping of header fields and valuesddrr.reason_phrase- response reason phraseddrr.record- the actual log record objectddrr.response- the actual response objectddrr.status_code- response status codeFor example, this will log the method, path and body of each request, as well
as the status code, reason phrase and content of each response:DDRR={"REQUEST_TEMPLATE":"{{ ddrr.method }} {{ ddrr.path }}\n""{{ ddrr.body }}","RESPONSE_TEMPLATE":"{{ ddrr.status_code }} {{ ddrr.reason_phrase }}\n""{{ ddrr.content }}",}Pretty-printingBy default, pretty-printing is disabled.  SetDDRR["PRETTY_PRINT"]toTrueto enable it.Pretty-printing of JSON requires no external dependency.Pretty-printing of XML usesminidomby default and doesn't require any extra
dependency. If you want to uselxmlinstead, which is slightly better at
pretty-printing XML, you can install that usingpip install ddrr[xml].How it works internallyThe middlewareddrr.middleware.DebugRequestsResponsessends the entire
request object as the message toddrr-request-logger.  This logger has been
configured to useddrr.formatters.DjangoTemplateRequestFormatterwhich
internally uses Django's built-in template engine to format the request into
human-readable form. By default, this is shown in your console output, but you
can easily configure it to log it to a file, Logstash, or anything else.Similar projectsDjango Debug ToolbarDevelopment and contributionsPR's are always welcome!For hacking on DDRR, make sure you are familiar with:BlackFlake8Poetrypre-commitpytestInstall dependencies and set up the pre-commit hooks.$ poetry install
$ pre-commit installThe pre-commit hooks will, among other things, run Flake8 on the code base and
Black to make sure the code style is consistent across all files.  Check out.pre-commit-config.yamlfor details.