Django Extensions Addon

An dieser Stelle wollen wir uns ein weiteres Helferlein installieren, die Django-Extensions. Diese reichern die Default-Subkommandos von manage.py um das eine oder andere hilfreiche Subkommando an.

Zur Doku der Extensions geht es hier: https://django-extensions.readthedocs.io/en/latest/

Django Extensions installieren

Aus Sicherheitsgründen wird das Paket nur für die Entwicklungs-Umgebung installiert. Fügen wir die Django Extensions also der requirements-dev.in hinzu:

factory-boy
django-debug-toolbar
django-extensions

Kompilieren und Syncen…

(eventenv)  pip-compile requirements-dev.in
(eventenv)  pip-sync requirements.txt requirements-dev.txt

Dann müssen wir die Django Extensions auch noch in den event_manager/settings/dev.py registrieren:

INSTALLED_APPS.extend(["debug_toolbar", "django_extensions"])

Wir können die Django-Extensions jetzt nutzen und müssen keine Migrationen durchführen. Wenn wir python manage.py ausführen, sehen wir neben den Standard-Kommandos noch einen neuen Bereich: Es würde zu weit führen, alle Kommandos in diesem Buch zu beschreiben, deshalb sei an dieser Stelle auf die Doku verwiesen.

(eventenv) python manage.py

[django_extensions]
 admin_generator
 clean_pyc
 clear_cache
 compile_pyc
 create_command
 create_jobs
 create_template_tags
 delete_squashed_migrations
 describe_form
 drop_test_database
 dumpscript
 export_emails
 find_template
 generate_password
 generate_secret_key
 graph_models
 list_model_info
 list_signals
 mail_debug
 merge_model_instances
 notes
 pipchecker
 print_settings
 print_user_for_session
 reset_db
 reset_schema
 runjob
 runjobs
 runprofileserver
 runscript
 runserver_plus
 set_default_site
 set_fake_emails
 set_fake_passwords
 shell_plus
 show_template_tags
 show_urls
 sqlcreate
 sqldiff
 sqldsn
 sync_s3
 syncdata
 unreferenced_files
 update_permissions
 validate_templates

Nützliche Kommandos

Beispielhaft seien hier mal ein paar nützliche Kommandos aufgezeigt.

show_urls

Mit python manage.py show_urls lassen sich alle verwendeten Routen im System anzeigen. Ein sehr praktisches Tool bei größeren Projekten.

python manage.py show_urls

python manage.py print_settings

Mit python manage.py print_settings lassen sich die aktuellen Settings ausdrucken.

python manage.py print_settings

python manage.py reset_db

Mit python manage.py reset_db wird die Datenbank komplett gelöscht. Alle Migrationen müssen neu ausgeführt und alle Testdaten neu eingespielt werden.

In der ersten Entwicklungsphase eines Projekts oft sehr hilfreich. Hinweis: Die Migrationsdateien werden nicht zerstört!

Um die Migrationsdateien auch zu entfernen, bieten sich unter Linux/Unix-Systemen folgende zwei Kommandos an:

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete
python manage.py reset_db

python graph_models

Wir können unsere App sowie das ganze Projekt auch als Graph im Json-Format visualisieren:

python manage.py graph_models events --json
python manage.py -a --json

Falls wir eine Grafik unseres Projekts als png-Grafik ausgegeben haben, muss auf dem Linux-System entweder pygraphviz nor pydotplus installiert sein. Ersteres nutzt graphviz, welches anhand sogenannter dot-Files strukturelle Daten als Graphen oder Diagramme visualisieren kann, zum Beispiel UML-Graphen. Wir wollen so ein Klassendiagramm für unser Projekt als png-Datei erstellen.

Wir fügen unter den requirements-dev.in den folgenden Eintrag hinzu und kompilieren uns syncen mit pip-compile und pip-sync wie gewohnt.

[..]
pygraphviz
(eventenv)  pip-compile requirements-dev.in
(eventenv)  pip-sync requirements.txt requirements-dev.txt

Nun erstellen wir den Graph unserer Projekts als UML-Klassendiagramm als png-Datei namens event_manager.png.

python manage.py graph_models -a -o event_manager.png

Mehr zu pygraphviz und graph_models * http://www.graphviz.org/ * https://django-extensions.readthedocs.io/en/latest/graph_models.html

python manage.py shell_plus

Erweitert die Django-Shell um das Importieren aller Models aus den Apps. Spart Tipparbeit im Umgang mit der Shell. Mit dem --print_sql Attribut lassen sich auch gleich die SQL - Queries untersuchen.

python manage.py shell_plus --print_sql

python manage.py validate_templates

Template-Fehler werden von Django nicht weiter angemeckert und gehen oft silent unter. validate_template schafft hier Abhilfe.

python manage.py validate_templates

Optional: Das Projekt in der Version v0.6 kopieren

Wie immer kann man sich den Zwischenstand klonen, falls beim Mitschreiben was schiefgegangen ist.

Version v0.6 via github clonen

git clone -b v0.6 git@github.com:realcaptainsolaris/event_project.git

und dann nicht vergessen, ein virtuelles Environment anzulegen und zu migrieren und danach noch ein paar Testdaten zu generieren:

python -m venv .envs/eventenv
pip install pip-tools
pip-sync requirements.txt requirements-dev.txt
python manage.py migrate
python manage.py createsuperuser
python manage.py create_user -n 10
python manage.py create_events --events 20 --categories 5
python manage.py runserver

Version v0.6 als zip-Datei runterladen

https://github.com/realcaptainsolaris/event_project/archive/refs/tags/v0.6.zip

Version v0.6 als tar-Datei runterladen

https://github.com/realcaptainsolaris/event_project/archive/refs/tags/v0.6.tar.gz