Maison  >  Article  >  développement back-end  >  Programmation serveur Python : utilisation de Django-mptt pour le traitement de la structure de données arborescente

Programmation serveur Python : utilisation de Django-mptt pour le traitement de la structure de données arborescente

王林
王林original
2023-06-18 09:03:111786parcourir

Python est un excellent langage de programmation largement utilisé dans la programmation côté serveur. Dans la programmation côté serveur, le traitement des structures de données arborescentes est une exigence courante. À l'heure actuelle, vous devez utiliser certains outils pour y parvenir. Parmi eux, Django-mptt est un outil très pratique. Cet article explique comment utiliser Django-mptt pour le traitement de la structure des données arborescentes.

1. Qu'est-ce que Django-mptt ?

django-mptt est une application de traitement de structure arborescente basée sur le framework Django. Elle peut nous aider à gérer diverses opérations telles que la création, la mise à jour, la suppression et le tri des données de structure arborescente. Cela peut grandement simplifier notre travail de codage et nous permettre de nous concentrer davantage sur le traitement de la logique métier.

2. Installation de Django-mptt

Avant d'utiliser Django-mptt, nous devons l'installer. Entrez la commande suivante dans la ligne de commande :

pip install django-mptt

3. Utilisation de base de django-mptt

  1. Créer un modèle

Tout d'abord, nous devons créer un modèle dans models.py, qui est la classe parent de l'arborescence. structure, Le code est le suivant :

from django.db import models
from mptt.models import MPTTModel, TreeForeignKey

class Category(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')

    class MPTTMeta:
        order_insertion_by = ['name']

    def __str__(self):
        return self.name

Dans ce modèle, nous utilisons les deux classes MPTTModel et TreeForeignKey. Parmi eux, MPTTModel est la classe de base du modèle fournie par Django-mptt pour le traitement des arborescences, et TreeForeignKey est la classe fournie par Django-mptt pour créer des clés étrangères. Nous définissons un attribut de nom et un attribut parent dans le modèle Category. L'attribut parent est de type TreeForeignKey et sa relation avec lui-même est une relation plusieurs-à-un. Dans la classe MPTTMeta, nous spécifions l'attribut order_insertion_by, qui jouera un rôle lorsque nous trierons l'arborescence.

  1. Migrer

Après avoir créé le modèle, nous devons le migrer afin que le modèle puisse créer des tables de base de données sur le serveur. Entrez la commande suivante sur la ligne de commande :

python manage.py makemigrations
python manage.py migrate

3. Ajouter des données

Après avoir créé le modèle de catégorie, nous devons ajouter quelques données afin de pouvoir vraiment comprendre comment il est utilisé. Entrez la commande suivante dans le terminal :

python manage.py shell

Une fois dans le shell Django, nous pouvons ajouter quelques données comme indiqué ci-dessous :

>>> from blog.models import Category
>>> root = Category(name='root')
>>> root.save()
>>> child1 = Category(name='child1', parent=root)
>>> child1.save()
>>> child2 = Category(name='child2', parent=root)
>>> child2.save()
>>> child11 = Category(name='child11', parent=child1)
>>> child11.save()

Dans ce code, nous créons un nœud racine appelé root et l'enregistrons dans la base de données. Ensuite, nous avons créé deux nœuds enfants nommés child1 et child2, et établi une relation parent-enfant entre eux et le nœud racine. Enfin, nous créons un nœud enfant nommé child11 et établissons une relation parent-enfant avec child1.

4. Interroger les données

Après avoir ajouté les données, nous pouvons interroger nos données de structure arborescente via certaines API fournies par django-mptt, comme indiqué ci-dessous :

>>> category_tree = Category.objects.all()
>>> category_tree
[<Category: root>, <Category: child1>, <Category: child11>, <Category: child2>]
>>> category_tree.get(name="root").get_family()
[<Category: root>, <Category: child1>, <Category: child11>, <Category: child2>]
>>> category_tree.get(name="root").get_children()
[<Category: child1>, <Category: child2>]
>>> category_tree.get(name="child1").get_children()
[<Category: child11>]
>>> category_tree.get(name="child11").get_parent()
<Category: child1>

Dans ce code, nous utilisons la catégorie .objects.all() obtient la liste de l'intégralité de la structure de données et utilise la méthode get_family() pour obtenir l'intégralité de la structure de données. Nous avons également utilisé la méthode get_children() pour obtenir les nœuds enfants d'un nœud, et la méthode get_parent() pour obtenir le nœud parent d'un nœud.

5. Supprimer les données

Après avoir interrogé les données, nous pouvons également les supprimer. Lors de l'exécution d'une opération de suppression, nous devons d'abord faire attention à la suppression de tous les nœuds enfants du nœud, sinon une exception sera levée. Vous trouverez ci-dessous le code de l'opération de suppression :

>>> child1.delete()
>>> # 删除child1后,我们执行以下查询操作
>>> category_tree = Category.objects.all()
>>> category_tree
[<Category: root>, <Category: child2>]

Dans cet exemple, nous supprimons le nœud child1 et interrogeons la structure de données à l'aide de la méthode get_all(). À ce stade, nous pouvons voir que child1 et child11 ont été supprimés de la structure de données.

4. Résumé

Grâce à cet article, nous avons appris l'utilisation de base de Django-mptt, notamment la création de modèles, la migration, l'ajout de données, l'interrogation de données et la suppression de données. En utilisant Django-mptt, nous pouvons facilement gérer les opérations d'ajout, de suppression, de modification et d'interrogation de données arborescentes. J’espère que cet article sera utile à votre étude.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn