In der Django-Entwicklung neigen Sie dazu, cli zu treffen, Ich verwende oft Task-Runner-Funktionen wie "Pipenv", weil ich mich nicht an die Optionen erinnern kann und es problematisch ist. Ich benutze oft Gedichtskripte, weil ich eine "Poesie" -Sekte bin. (Beachten Sie, dass Poesie die Skriptfunktion nicht im Namen der Task-Runner-Funktion implementiert.)
Wenn Sie "django_extensions" verwenden, können Sie häufig bereits die gewünschten Funktionen verwenden.
In einem früheren Beitrag habe ich ein Skript eingeführt, das Runserver ausführt. [Poesie] Starten Sie Djangos Runserver mit dem Poesieskript --Qiita Darüber hinaus werde ich dieses Mal das in meinem Projekt verwendete Skript vorstellen.
django-extensions
django-extensions ist eine Anwendung für die Django-Entwicklung und ein Paket, das verschiedene nützliche Funktionen bietet. Installieren Sie django-extensions und fügen Sie es INSTALLED_APPS hinzu.
$ pip install django-extensions
INSTALLED_APPS = [
...
'django_extensions', #hinzufügen
]
scripts
Ich verwende Poesie für die Paketverwaltung, also verwende ich Gedichtskripte. Der Vorteil der Verwendung von Gedichtskripten besteht darin, dass sie, selbst wenn Sie sie außerhalb der virtuellen Umgebung ausführen, einmal in die virtuelle Umgebung eintreten und die Aufgabe innerhalb der virtuellen Umgebung ausführen. Wenn Sie nur den Test überprüfen, nur die URL auflisten oder die virtuelle Umgebung nicht verstehen möchten, können Sie sie mit einem einzeiligen Befehl ausführen.
Wie im vorherigen Beitrag werden wir das Unterprozesspaket verwenden, um Befehle auszuführen.
shell_plus
Es ist eine Funktion namens django-extensions, und es gibt eine Funktion namens shell_plus. Es erweitert die Django-Shell und ist sehr praktisch, da es abgeschlossen und vorimportiert wird.
def shell_plus():
cmd = ["python", "manage.py", "shell_plus"]
subprocess.run(cmd)
django-extensions kann alle URLs für Django-Anwendungen ausgeben.
Dies ist sehr nützlich beim Erstellen von API-Dokumenten.
Mit der Option --format
können Sie das Ausgabeformat ändern.
def url():
cmd = ["python", "manage.py", "show_urls", "--format", "aligned", "--force-color"]
subprocess.run(cmd)
Wenn Sie die Notizenfunktion von Django-Erweiterungen verwenden, Es extrahiert "TODO, FIXME, BUG, HACK, WARNING, NOTE" usw. in die py-Datei und die HTML-Datei und zeigt sie in einer Liste an. Dies ist nüchtern und bequem, und es ist gut, das TODO zu Beginn des Tages mit der CLI bestätigen zu können. Der Pfad zur Datei wird ebenfalls angezeigt. Wenn es sich also um VS-Code handelt, können Sie ihn mit Strg + Klick öffnen.
def todo():
cmd = ["python", "manage.py", "notes"]
subprocess.run(cmd)
--Ausgabe
$ python manage.py notes
/home/user/workspace/app/web/views.py:
* [ 18] TODO sort filter
/home/user/workspace/app/web/models.py:
* [ 11]TODO-Ausnahmebehandlung
/home/user/workspace/app/web/forms.py:
* [ 32]TODO-Validierung hinzugefügt
Die Testfunktion von Django umfasst die Funktion zur parallelen Ausführung.
Natürlich hängt die Anzahl der CPU-Kerne von der Anzahl der Ausführungen ab, aber die Anzahl der Kerne variiert je nach Umgebung.
Verwenden Sie multiprocessing.cpu_count (), um die Anzahl der Kerne dynamisch zu erfassen und Tests parallel auszuführen.
-v
ist ausführlich.
import multiprocessing
def test():
core_num = multiprocessing.cpu_count()
# core_Wenn Sie es auf num setzen, funktioniert der Test nicht, da der Unterprozess ein Ausführungsprozess ist.
cmd = ["python", "manage.py", "test", "--force-color", "-v", "2", "--parallel", f"{core_num - 1}"]
subprocess.run(cmd)
Wenn die Datenbank zurückgesetzt wird, werden alle Migrationsdateien gelöscht. Es ist einfach, ein Löschskript zu erstellen, da es in den frühen Entwicklungsstadien ziemlich häufig ausgeführt wird.
import os
import glob
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) #Geändert durch den Speicherort dieser Datei
def clean_migration():
migration_files = glob.iglob('**/migrations/[0-9][0-9][0-9][0-9]*.py', recursive=True)
for migration_file in migration_files:
os.remove(os.path.join(BASE_DIR, migration_file))
print(f"Deleted {migration_file}")
Die Möglichkeit, die Datenbank mit einem einzigen Befehl zu löschen und neu zu erstellen, wird in Django-Erweiterungen bereitgestellt.
def reset_db():
cmd = ["python", "manage.py", "reset_db"]
subprocess.run(cmd)
Wenn Sie die Funktion von Django-Erweiterungen verwenden, wird das ER-Diagramm automatisch aus der Modelldefinition generiert.
Um diese Funktion nutzen zu können, benötigen Sie Graphviz
und den Adapter für Pythonpygraphviz
.
Es ist großartig, das neueste ER-Diagramm mit einem Befehl zu erstellen.
def graph():
cmd = ["python", "manage.py", "graph_models", "-a", "-g", "-o", "--arrow-shape", "normal", "graph.png "]
subprocess.run(cmd)
Zeigt den Namen der App an, in der models.py
vorhanden ist.
Es ist nicht viel Code, aber es ist nützlich, wenn Sie überprüfen, ob Migrationen durchgeführt werden.
Wenn Sie eine Verzeichnisstruktur mit der Aufschrift "python manage.py startapp app" haben und kein Modell schreiben, müssen Sie "models.py" löschen.
import glob
def main():
model_files = glob.iglob('**/models.py', recursive=True)
for model_file in model_files:
path_split = model_file.split("/")
print(path_split[-2])
Zusätzlich zu diesen gibt es "runserver_plus", das den Django-Runserver verbessert, "admin_generator", der automatisch "admin.py" usw. generiert, aber sie werden nicht aufgelistet, da ich sie selbst nie verwendet habe.
Recommended Posts