[PYTHON] Vue d'ensemble des vues génériques basées sur les classes et des relations de classe héritées

Cet article est l'article du 13ème jour du calendrier de l'avent Django 2019. Dans cet article, j'aimerais résumer la vue d'ensemble de Django "Vue générique basée sur les classes" et les relations de classe héritées.

supposition

Nous nous référons et citons la Documentation officielle de Django 3.0, la dernière version au moment de la rédaction de cet article.

Qu'est-ce qu'une vue générique basée sur les classes?

Premièrement, une "vue" dans Django est une logique encapsulée [^ 1] qui traite une requête utilisateur et renvoie une réponse. Définissez les données à afficher dans le "modèle", qui est la couche de présentation, et effectuez le traitement en réponse aux demandes. Bien que controversé, le "contrôleur" dans le framework MVC peut être plus proche de l'image générale [^ 2].

Django fournit une «vue générique basée sur les classes» qui généralise la logique de développement de cette vue. Comme son nom l'indique, la vue générique basée sur les classes est une vue basée sur les classes, vous pouvez donc réutiliser le code en utilisant l'héritage [^ 3]. En utilisant la vue générale, vous pouvez éviter la redondance et les modèles de chaudière dans le développement Web, et développer en tirant le meilleur parti du concept de conception de Django de "Moins de code" et "Ne vous répétez pas".

Liste des vues génériques

Une liste et un aperçu des vues génériques. L'importance est fixée en fonction de la fréquence d'utilisation personnelle dans le développement normal. Je pense que l'importance dépend des caractéristiques du service.

Vue de base

Groupe de vues de base qui définissent les fonctions minimales comme une vue à usage général. La classe ici est également héritée d'autres vues génériques.

classe importance Aperçu
View ★★★ Vue de base de la vue générique
TemplateView ★★★ Vue de base de la vue qui rend le modèle
RedirectView ★★☆ Afficher pour la redirection

Vue pour affichage

Un groupe de vues pour afficher la liste / l'écran de détail. Je pense que c'est la classe la plus fréquente dans le développement de sites Web en général.

classe importance Aperçu
DetailView ★★★ Afficher pour afficher l'écran de détail
ListView ★★★ Vue pour afficher l'écran de liste

Modification de la vue

Un groupe de vues pour afficher l'écran d'édition. Cette classe peut être utilisée sur les écrans d'opération CRUD généraux.

classe importance Aperçu
FormView ★★☆ Affichage de l'écran du formulaire
CreateView ★★☆ Vue de l'écran de création
UpdateView ★★☆ Mettre à jour la vue d'écran
DeleteView ★★☆ Supprimer la vue d'écran

Vue par date

Il s'agit d'un groupe de vues permettant d'afficher une liste par année ou par mois, comme un blog.

classe importance Aperçu
ArchiveIndexView ★☆☆ Afficher pour voir la liste des éléments avec la dernière date
YearArchiveView ★☆☆ Vue pour afficher l'écran de liste par année
MonthArchiveView ★☆☆ Vue pour afficher l'écran de la liste mensuelle
WeekArchiveView ★☆☆ Afficher pour afficher l'écran de liste par semaine
DayArchiveView ★☆☆ Vue pour afficher l'écran de la liste quotidienne
TodayArchiveView ★☆☆ Vue pour afficher l'écran de liste de la date du jour
DateDetailView ★☆☆ Vue pour afficher l'écran des détails pour chaque date

Structure de vue à usage général

Une vue générique est elle-même configurée pour hériter d'une autre vue générique ou de plusieurs héritages d'un Mixin générique. Une vue générique définit le comportement d'une vue en définissant ses attributs et son comportement. Notez que la plupart des attributs ont des accesseurs définis pour eux, il est donc possible de changer dynamiquement la valeur d'un attribut en remplaçant l'accesseur.

Vue de base

Diagramme de classes (Django.views.generic.base)

View est la classe de base pour toutes les vues génériques, et View a des attributs référencés par d'autres classes telles que request`` kwargs. TemplateView consiste en l'héritage multiple de TemplateResponseMixin pour le rendu du fichier modèle et de ContextMixin qui transmet les variables de contexte au modèle. Ces deux Mixins sont hérités par toutes les vues génériques sauf RedirectView. base.png

Vue pour affichage

Diagramme de classes (Django.views.generic.list``` Django.views.generic.detail)

La principale différence entre «ListView» et «DetailView» est Mixin, qui est entouré d'un cadre rouge. Vous pouvez voir que la structure de base est presque la même, seule la différence dépend du fait que la variable de contexte transmise au modèle est une liste ou un seul objet. list.png detail.png

Modification de la vue

Diagramme de classes (Django.views.generic.edit)

Comme il existe de nombreuses classes héritées, seules la vue à usage général et le mixin dans le même module sont entourés d'un cadre rouge. Toutes les vues à usage général, à l'exception de DeleteView, héritent de FormMixin, qui génère des formulaires, et de ProcessFormView, qui effectue le rendu à GET et la validation à POST. Pour les vues restantes et Mixin, les classes selon l'opération CRUD associée à chaque vue d'édition sont héritées. edit.png

finalement

Je pense qu'il est facile pour les nouveaux utilisateurs de Django de se faire une idée de Django, comme par exemple saisir le concept de généralisation des vues à usage général, comprendre les classes et les Mixins et leurs attributs (champs) et comportements (méthodes). Il existe de nombreux bons articles sur le système de procédures d'affichage général basé sur les classes, j'ai donc essayé d'obtenir un aperçu graphique de cet article.

Recommended Posts

Vue d'ensemble des vues génériques basées sur les classes et des relations de classe héritées
Prise en main et utilisation d'exemples de vues génériques basées sur des classes dans Django
Calcul de la classe auto-fabriquée et de la classe existante
Diagramme de classes API de vues basées sur les classes
Exemple d'utilisation de variables de classe et de méthodes de classe
[Python] Type de classe et utilisation du module datetime
Résumé du traitement pickle et unpickle des classes définies par l'utilisateur