In this post I’m gonna list some very useful tools I often use when developing a Django project. These packages help me improve the development speed, write better code and also find/debug problems faster.
So lets start:
Black
This one is to avoid useless discussions about preferences and taste related to code formatting. Now I just simply install black
and let it care of these matters, it doesn’t have any configurations (with one or two exceptions) and if your code does not have any syntax errors it will be automatically formatted according to a “style” that is reasonable.
Note: Many editors can be configured to automatically run black
on every file save.
https://github.com/python/black
PyLint
Using a code linter (a kind of static analysis tool) is also very easy, can be integrated with your editor and allows you to catch many issues without even running your code, such as, missing imports, unused variables, missing parenthesis and other programming errors, etc. There are a few other In this case pylint
does the job well and I never bothered to switch.
Pytest
Python has a unit testing framework included in its standard library (unittest
) that works great, however I found out that there is an external package that makes me more productive and my tests much more clear.
That package is pytest
and once you learn the concepts it is a joy to work with. A nice extra is that it recognizes your older unittest
tests and is able to execute them anyway, so no need to refactor the test suite to start using it.
https://docs.pytest.org/en/latest/
Pytest-django
This package, as the name indicates, adds the required support and some useful utilities to test your Django projects using pytest
. With it instead of python manage.py test
, you will execute just pytest
like any other python project.
https://pytest-django.readthedocs.io
Django-debug-toolbar
Debug toolbar is a web panel added to your pages that lets you inspect your requests content, database queries, template generation, etc. It provides lots of useful information in order for the viewer to understand how the whole page rendering is behaving.
It can also be extended with other plugin that provide more specific information such as flamegraphs, HTML validators and other profilers.
https://django-debug-toolbar.readthedocs.io
Django-silk
If you are developing an API without any HTML pages rendered by Django, django-debug-toobar
won’t provide much help, this is where django-silk
shines in my humble opinion, it provides many of the same metrics and information on a separate page that can be inspected to debug problems and find performance bottlenecks.
https://github.com/jazzband/django-silk
Django-extensions
This package is kind of a collection of small scripts that provide common functionality that is frequently needed. It contains a set of management commands, such as shell_plus
and runserver_plus
that are improved versions of the default ones, database visualization tools, debugger tags for the templates, abstract model classes, etc.
https://django-extensions.readthedocs.io
Django-mail-panel
Finally, this one is an email panel for the django-debug-toolbar
, that lets you inspect the sent emails while developing your website/webapp, this way you don’t have to configure another service to catch the emails or even read the messages on terminal with django.core.mail.backends.console.EmailBackend
, which is not very useful if you are working with HTML templates.