.. _django_extensions: .. index:: single: Django Extensions single: show_urls single: reset_db single: validate_templates single: shell_plus 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:** ``_ 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: .. code-block:: shell factory-boy django-debug-toolbar django-extensions Kompilieren und Syncen... .. code-block:: shell (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: .. code-block:: python 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. .. code-block:: shell (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. .. code-block:: shell python manage.py show_urls python manage.py print_settings ---------------------------------- Mit ``python manage.py print_settings`` lassen sich die aktuellen Settings ausdrucken. .. code-block:: shell 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: .. code-block:: shell find . -path "*/migrations/*.py" -not -name "__init__.py" -delete find . -path "*/migrations/*.pyc" -delete .. code-block:: shell python manage.py reset_db python graph_models ------------------------ Wir können unsere App sowie das ganze Projekt auch als Graph im Json-Format visualisieren: .. code-block:: shell 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. .. code-block:: shell [..] pygraphviz .. code-block:: shell (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``. .. code-block:: shell python manage.py graph_models -a -o event_manager.png **Mehr zu pygraphviz und graph_models** * ``_ * ``_ 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. .. code-block:: shell 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. .. code-block:: shell 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 ...................................... .. code-block:: bash 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: .. code-block:: bash 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 ........................................... ``_ Version v0.6 als tar-Datei runterladen ............................................ ``_