.. _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
............................................
``_