[PYTHON] [Django] Eine Sammlung von Skripten, die für die Entwicklung geeignet sind

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.

Umgebung

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)

URL anzeigen

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)

Zeige TODO in der Quelle

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

Führen Sie den Test aus

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)

Migrationsdatei löschen

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}")

Datenbank zurückgesetzt

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)

Generierung eines ER-Diagramms

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)

Zeigen Sie den Namen der App mit models.py an

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

[Django] Eine Sammlung von Skripten, die für die Entwicklung geeignet sind
Python-E-Book-Zusammenfassung nützlich für die frei lesbare Datenanalyse
Sammlung von Numpy, Pandas Tipps, die häufig auf dem Feld verwendet werden
[Linux] Praktische, aber unerwartet unbekannte ursprüngliche Auswahlliste für Befehle
Eine Sammlung von Ressourcen, die zum Erstellen und Erweitern von Punktedateien hilfreich sein können
Super einfach: Eine Sammlung von Shells, die Daten ausgeben
Ich habe eine Entwicklungsumgebung für Django 3.0 mit Docker, Docker-Compose und Poetry erstellt
[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
Eine Sammlung von einzeiligen Webservern
Implementieren Sie in Python Ihren eigenen jupyter magic-Befehl% timeit, der für die Geschwindigkeitsmessung praktisch ist
Memorandum of JSON Schema Notation für Wörterbücher, die beliebige Schlüssel verwenden
[Django] Eine Sammlung von Skripten, die für die Entwicklung geeignet sind
Eine Sammlung von Methoden, die beim Aggregieren von Daten mit Pandas verwendet werden
Goldnadel für den Fall, dass sie zu einem Stein wird, wenn man sich die Formel der Bildverarbeitung ansieht
Eine Sammlung von Tipps zur Beschleunigung des Lernens und Denkens mit PyTorch
Websites nützlich für das Studium von Django
Erstellen Sie ein Modell für Ihren Django-Zeitplan
Befehle zum Erstellen eines neuen Django-Projekts
Eindrücke von der Verwendung von Flask für einen Monat
Bau einer Entwicklungsumgebung für die Choreonoid-Werkstatt
Erstellen einer Python-Entwicklungsumgebung für die KI-Entwicklung
Erstellen einer Entwicklungsumgebung für maschinelles Lernen
Schreiben Sie kurz if-else von Django Template
Für SageMaker Anfänger-Material Links-
Klasse für PYTHON, die ohne Kenntnis von LDAP betrieben werden kann
Die Geschichte von Django, wie er eine Bibliothek erstellt, die vielleicht etwas nützlicher ist
Lassen Sie uns eine einfache Vorlage anzeigen, die ideal für den ersten Django ist