Dans le développement Django, vous avez tendance à frapper cli,
J'utilise souvent des fonctions d'exécution de tâches telles que Pipenv
parce que je ne me souviens pas des options et que c'est gênant.
J'utilise beaucoup les scripts de poésie parce que je suis une secte de «poésie». (Notez que la poésie n'implémente pas la fonction scripts dans le nom de la fonction d'exécution de tâches)
De plus, si vous utilisez django_extensions
, vous pouvez souvent déjà utiliser les fonctions que vous souhaitez.
Dans un post précédent, j'ai présenté un script qui fait runserver. [Poetry] Démarrez le serveur d'exécution de Django avec le script Poetry --Qiita En plus de cela, je présenterai cette fois le script utilisé dans mon projet.
django-extensions
django-extensions est une application pour le développement Django et est un paquet qui fournit diverses fonctions utiles. Installez django-extensions et ajoutez-le à INSTALLED_APPS.
$ pip install django-extensions
INSTALLED_APPS = [
...
'django_extensions', #ajouter à
]
scripts
J'utilise Poetry pour la gestion des paquets, donc j'utilise des scripts de poésie. L'avantage d'utiliser des scripts de poésie est que même si vous l'exécutez en dehors de l'environnement virtuel, il entrera une fois dans l'environnement virtuel et exécutera la tâche dans l'environnement virtuel. Si vous souhaitez vérifier uniquement le test, lister uniquement l'URL ou même si vous ne comprenez pas l'environnement virtuel, vous pouvez l'exécuter avec une commande sur une seule ligne.
Comme dans l'article précédent, nous utiliserons le package de sous-processus pour exécuter des commandes.
shell_plus
C'est une fonction appelée django-extensions, et il existe une fonction appelée shell_plus. Il étend le shell Django et est assez pratique car il complète et pré-importe.
def shell_plus():
cmd = ["python", "manage.py", "shell_plus"]
subprocess.run(cmd)
django-extensions a la capacité de générer toutes les URL des applications Django.
C'est très utile lors de la création de documents API.
L'option --format
vous permet de changer le format de sortie.
def url():
cmd = ["python", "manage.py", "show_urls", "--format", "aligned", "--force-color"]
subprocess.run(cmd)
Si vous utilisez la fonction notes de django-extensions,
Il extrait TODO, FIXME, BUG, HACK, WARNING, NOTE
, etc. dans le fichier py et le fichier HTML et les affiche dans une liste.
C'est sobre et pratique, et il est bon de pouvoir confirmer le TODO en début de journée avec la CLI.
Le chemin du fichier est également affiché, donc s'il s'agit de VS Code, vous pouvez l'ouvrir tel quel avec Ctrl + clic
.
def todo():
cmd = ["python", "manage.py", "notes"]
subprocess.run(cmd)
--Production
$ python manage.py notes
/home/user/workspace/app/web/views.py:
* [ 18] TODO sort filter
/home/user/workspace/app/web/models.py:
* [ 11]Gestion des exceptions TODO
/home/user/workspace/app/web/forms.py:
* [ 32]Ajout de la validation TODO
La fonction de test de Django comprend une fonction d'exécution parallèle.
Bien entendu, le nombre de cœurs CPU est lié au nombre d'exécutions, mais le nombre de cœurs varie en fonction de l'environnement.
Utilisez multiprocessing.cpu_count ()
pour acquérir dynamiquement le nombre de cœurs et exécuter des tests en parallèle.
-v
est verbeux.
import multiprocessing
def test():
core_num = multiprocessing.cpu_count()
# core_Si vous le définissez sur num, le test ne fonctionnera pas car le sous-processus sera un processus d'exécution.
cmd = ["python", "manage.py", "test", "--force-color", "-v", "2", "--parallel", f"{core_num - 1}"]
subprocess.run(cmd)
Lorsque la base de données est réinitialisée, tous les fichiers de migration sont supprimés. Il est facile de créer un script de suppression car cela se fait assez souvent au tout début du développement.
import os
import glob
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) #Modifié par l'emplacement de ce fichier
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}")
La possibilité de supprimer et de recréer la base de données avec une seule commande est fournie dans django-extensions.
def reset_db():
cmd = ["python", "manage.py", "reset_db"]
subprocess.run(cmd)
Si vous utilisez la fonction de django-extensions, le diagramme ER sera automatiquement généré à partir de la définition du modèle.
Pour utiliser cette fonctionnalité, vous avez besoin de Graphviz
et de l'adaptateur pour Pythonpygraphviz
,
C'est génial de créer le dernier diagramme ER avec une seule commande.
def graph():
cmd = ["python", "manage.py", "graph_models", "-a", "-g", "-o", "--arrow-shape", "normal", "graph.png "]
subprocess.run(cmd)
Affiche le nom de l'application où models.py
existe.
Ce n'est pas beaucoup de code, mais c'est utile lors de la vérification lors des migrations.
Si vous avez une structure de répertoires qui dit python manage.py startapp app
et que vous n'écrivez pas de modèle, vous devez supprimer models.py
.
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])
En plus de ceux-ci, il y a runserver_plus
qui améliore django runserver, ʻadmin_generator` qui génère automatiquement admin.py, etc., mais ils ne sont pas listés car je ne les ai jamais utilisés moi-même.
Recommended Posts