No project description provided
Project description
Django Debug Requests & Responses (DDRR)
Get more out of your runserver
development output! Print request and response
headers, body (with pretty-printing), etc. Highly customizable!
- Full request headers
- The entire request body
- Pretty-printing optional
- Colored output
- Super easy setup
- No extra dependencies
DDRR can also be used for general logging with some configuration of your own.
Installation
$ pip install ddrr
# in settings.py
INSTALLED_APPS = (
# ...
"ddrr",
)
import ddrr
ddrr.quick_setup()
Note: If you have any LOGGING
configuration, put it before quick_setup
,
otherwise you will override the DDRR configuration!
Customization
ddrr.quick_setup
accepts the following optional arguments:
enable_requests
- (default: True) Enable request logging.enable_responses
- (default: True) Enable response logging.level
- (default: DEBUG) The level of the log messages.pretty
- (default: False) Enable pretty-printing of bodies.request_template
- (default: None) Request template stringrequest_template_name
- (default: None) Request template nameresponse_template
- (default: None) Response template stringresponse_template_name
- (default: None) Response template namelimit_body
- (default: None) Limit request and response body lengthcolors
- (default: True) Enable color support if terminal supports it
Change output formats
You can pass request_template
or request_template_name
to quick_setup
to
define a different output format for request logs. The same goes for responses,
use response_template
or response_template_name
.
The templates are normal Django templates which are passed the necessary template context with access to pretty much anything you could be interested in.
- 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 object
- Response 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 code
For 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.quick_setup(
request_template="{{ ddrr.method }} {{ ddrr.path }}\n"
"{{ ddrr.body }}",
response_template="{{ ddrr.status_code }} {{ ddrr.reason_phrase }}\n"
"{{ ddrr.content }}",
)
How it works internally
The middleware ddrr.middleware.DebugRequestsResponses
sends the entire
request object as the message to ddrr-request-logger
. This logger has been
configured to use ddrr.formatters.DjangoTemplateRequestFormatter
which
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, ElasticSearch, or anything else.
Similar projects
Development and contributions
PR's are always welcome!
For hacking on DDRR, make sure you are familiar with:
Install dependencies and set up the pre-commit hooks.
$ poetry install
$ pre-commit install
The 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.yaml
for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.