Ecrire Django efficace. Comment utiliser les vues, modèles et… de Django | par Victoria Drake | Meilleure programmation | Juil.2020

Online Coding Courses for Kids

N’oubliez pas que Django est entièrement en Python sous le capot. En ce qui concerne les vues, vous avez deux choix: afficher les fonctions (parfois appelés «vues fonctionnelles») ou vues basées sur les classes.

Il y a des années quand j’ai construit ApplyByAPI, il était initialement composé entièrement de vues fonctionnelles. Ceux-ci offrent un contrôle granulaire et sont bons pour implémenter une logique complexe; tout comme dans une fonction Python, vous avez un contrôle complet (pour le meilleur ou pour le pire) sur ce que fait la vue. Une grande maîtrise entraîne une grande responsabilité et les vues basées sur les fonctions peuvent être un peu fastidieuses à utiliser. Vous êtes responsable de l’écriture de toutes les méthodes nécessaires au fonctionnement de la vue. C’est ce qui vous permet de personnaliser complètement votre application.

Dans le cas d’ApplyByAPI, il n’y avait que quelques endroits où ce niveau de fonctionnalité sur mesure était vraiment nécessaire. Partout ailleurs, les vues basées sur les fonctions ont commencé à rendre ma vie plus difficile. L’écriture de ce qui est essentiellement une vue personnalisée pour les opérations courantes comme l’affichage des données sur une page de liste est devenue fastidieuse, répétitive et sujette aux erreurs.

Avec les vues basées sur les fonctions, vous devrez déterminer les méthodes Django à implémenter afin de gérer les demandes et de transmettre des données aux vues. Les tests unitaires peuvent prendre un certain travail à écrire. En bref, le contrôle granulaire qu’offrent les vues basées sur les fonctions nécessite également un certain ennui granulaire pour être correctement mis en œuvre.

J’ai fini par retenir ApplyByAPI pendant que je refaçonnais la majorité des vues en vues basées sur les classes. Ce n’était pas une petite quantité de travail et de refactoring, mais quand cela a été fait, j’ai eu un tas de vues minuscules qui ont fait une énorme différence. Je veux dire, regardez celui-ci:

class ApplicationsList(ListView):
model = Application
template_name = "applications.html"

C’est trois lignes. L’ergonomie de mon développeur et ma vie sont devenues beaucoup plus faciles.

Vous pouvez considérer les vues basées sur les classes comme des modèles qui couvrent la plupart des fonctionnalités dont une application a besoin. Il existe des vues pour afficher des listes de choses, pour afficher une chose en détail, et modification des vues pour effectuer des opérations CRUD (Créer, Lire, Mettre à jour, Supprimer). Parce que l’implémentation de l’une de ces vues génériques ne prend que quelques lignes de code, ma logique d’application est devenue extrêmement succincte. Cela m’a donné moins de code répété, moins d’endroits où quelque chose ne va pas et une application plus gérable en général.

Les vues basées sur les classes sont rapides à implémenter et à utiliser. Les vues génériques basées sur les classes intégrées peuvent nécessiter moins de travail à tester, car vous n’avez pas besoin d’écrire des tests pour la vue de base fournie par Django. (Django fait ses propres tests pour cela; pas besoin que votre application revérifie.) Pour ajuster une vue générique à vos besoins, vous pouvez sous-classe une vue générique et remplacer les attributs ou les méthodes. Dans mon cas, comme je n’avais besoin que d’écrire des tests pour toutes les personnalisations que j’ai ajoutées, mes fichiers de test sont devenus considérablement plus courts, tout comme le temps et les ressources nécessaires pour les exécuter.

Lorsque vous pesez le choix entre les vues basées sur les fonctions ou les classes, tenez compte du degré de personnalisation dont la vue a besoin et des travaux futurs qui seront nécessaires pour la tester et la maintenir. Si la logique est courante, vous pourrez peut-être vous lancer avec une vue générique basée sur une classe. Si vous avez besoin d’une granularité suffisante pour que la réécriture des méthodes d’une vue de base la rende trop compliquée, envisagez plutôt une vue basée sur les fonctions.

Close Menu