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:
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.
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.
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.
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.
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.
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.
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
runserver_plus that are improved versions of the default ones, database visualization tools, debugger tags for the templates, abstract model classes, etc.
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.