L'objectif principal du framework Django est le modèle (Model), le modèle (Template) et la vue (Views), connu sous le nom de modèle MTV.
Leurs responsabilités respectives sont les suivantes :
niveau | responsabilité |
---|---|
Model (Modèle), la couche d'accès aux données | Gérer toutes les questions liées aux données : comment y accéder, comment vérifier la validité, quels comportements sont inclus, et la relation entre les données, etc. |
Modèle (Template), la couche de logique métier | Gère les décisions liées à la présentation : comment afficher sur une page ou un autre type de document. |
Vue (View), la couche de présentation | La logique associée à l'accès au modèle et à l'appel du modèle approprié. Pont modèle et modèle. |
En termes simples, Model accède aux données, View décide quelles données doivent être récupérées et Template est chargé d'afficher les données récupérées de manière raisonnable.
Base de données et modèle
Une base de données est un endroit où stocker des fichiers électroniques, stockant des collections de données indépendantes. Une base de données se compose de plusieurs tables de données .
Que veux-tu dire? Par exemple, la liste des élèves de la deuxième classe de la troisième année est la table de données . Certaines listes enregistrent les résultats des tests de chaque élève, certaines enregistrent la taille et le poids, et certains enregistrent les loisirs... Toutes ces listes sont placées dans le cabinet du professeur, qui est la "base de données"**.
Par défaut, la base de données est le fichier db.sqlite3.
Le fonctionnement de la base de données utilise des instructions SQL complexes, qui est un autre langage complètement différent de Python, ce qui est sans aucun doute difficile pour les novices.
Heureusement, écrire des applications web dans Django ne vous oblige pas à exploiter directement la base de données, mais à définir un modèle (utilisez simplement la syntaxe Python !), qui contient les commandes nécessaires pour exploiter la base de données. C'est-à-dire que vous n'avez qu'à définir le modèle de données et que vous ne vous souciez pas des autres codes sous-jacents, ils seront automatiquement générés à partir du modèle.
En fait, il a un terme spécial appelé mappage objet-relationnel ( Object Relational Mapping , ORM en abrégé ), qui est utilisé pour réaliser la conversion entre les données de différents types de systèmes dans des langages de programmation orientés objet.
Écrire Model.py
Comme mentionné précédemment, Django mappe à la base de données via le modèle (Modèle) pour gérer les transactions liées aux données.
Ouvrez book/models.py
le fichier et entrez le code suivant :
from django.db import models
# 图书信息数据模型
class Book(models.Model):
barcode = models.CharField(max_length=20, default='', primary_key=True, verbose_name='图书条形码')
bookName = models.CharField(max_length=20, default='', verbose_name='图书名称')
price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='图书价格')
count = models.IntegerField(default=0, verbose_name='库存')
publishDate = models.CharField(max_length=20, default='', verbose_name='出版日期')
publish = models.CharField(max_length=20, default='', verbose_name='出版社')
# bookPhoto = models.ImageField(upload_to='img', max_length='100'[错误修正], verbose_name='图书图片')
bookPhoto = models.ImageField(upload_to='img', max_length=100, verbose_name='图书图片')
bookDesc = models.TextField(max_length=8000, verbose_name='图书简介')
bookUpdated = models.DateTimeField(auto_now=True)
class Meta:
db_table = 't_Book'
verbose_name = '图书信息'
verbose_name_plural = verbose_name
Book
La classe définit les informations d'un livre : nom du livre, prix du livre, date de publication, éditeur de création, présentation du livre, etc.
Nous pouvons également définir un contenu supplémentaire, Book
le comportement des données dans la spécification :
# book/models.py
...
class Book(models.Model):
...
# 内部类 class Meta 用于给 model 定义元数据
class Meta:
# 数据表名称
db_table = 't_Book'
verbose_name = '图书信息'
verbose_name_plural = verbose_name
# ordering 指定模型返回的数据的排列顺序
# '-bookUpdated' 表明数据应该以倒序排列
ordering = ('-bookUpdated',)
# 函数 __str__ 定义当调用对象的 str() 方法时的返回值内容
def __str__(self):
# 将图书名称返回
return self.bookName
- La classe interne
Meta
définitordering
la manière dont les données sont organisées.-bookUpdated
Indique qu'ils seront classés dans l'ordre inverse du temps de création, garantissant que les derniers articles sont toujours en haut de la page. Notezordering
qu'il s'agit d'un tuple, n'oubliez pas la virgule à la fin lorsqu'il n'y a qu'un seul élément entre parenthèses. __str__
La méthode définit le nom qui doit être affiché lorsque les données doivent être représentées.__str__
Il est important d' ajouter des méthodes aux modèles , dont les plus courantes sont les valeurs d'affichage en tant qu'objets dans l'administrateur Django. Par conséquent, une chaîne lisible par l'homme doit toujours être renvoyée.
Félicitations, vous avez terminé la majeure partie du modèle de données de base du site de blog.
Le code fait moins de 20 lignes, donc ça n'a pas l'air du tout. Plus tard, je réaliserai lentement la puissance de Django.
Les vues et les modèles seront abordés sous peu.
Migration de données (Migrations)
Une fois le modèle écrit, la migration des données est ensuite requise. Les migrations sont la manière dont les modifications apportées par Django à vos modèles sont propagées dans la base de données.
Configuration de MySQL dans Django
Configurez la connexion à la base de données MySQL dans le fichier du projet
settings.py
.# settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'your_database_name', 'USER': 'your_username', 'PASSWORD': 'your_password', 'HOST': 'localhost', 'PORT': '3306', } }
Notez que la migration des données est requise chaque fois qu'un changement (ajout, modification, suppression, etc.) est apporté à la base de données.
Le code de migration de Django est automatiquement généré à partir du fichier de modèle, qui est essentiellement un simple enregistrement historique. Django peut l'utiliser pour effectuer des mises à jour continues de la base de données, de cette manière, il peut correspondre au modèle actuel.
Dans le terminal de PyCharm, saisissez python manage.py makemigrations
, pour créer une nouvelle table de migration pour les modifications de modèle :
(venv) PS E:\djangopj\library> python manage.py makemigrations
Migrations for 'book':
book\migrations\0001_initial.py
- Create model Book
(venv) PS E:\djangopj\library>
En exécutant makemigrations
la commande, Django détectera vos modifications apportées aux fichiers de modèle et stockera les modifications en tant que migration.
Saisissez ensuite python manage.py migrate
, pour appliquer la migration à la base de données :
(venv) PS E:\djangopj\library> python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, book, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying book.0001_initial... OK
Applying sessions.0001_initial... OK
(venv) PS E:\djangopj\library>
Navicat vérifie que la table est créée avec succès.
migrate
La commande sélectionne toutes les migrations qui n'ont pas encore été exécutées et les applique à la base de données, c'est-à-dire que les modifications apportées au modèle sont synchronisées avec la structure de la base de données. La migration est une fonctionnalité très puissante qui vous permet de modifier en permanence la structure de la base de données pendant le développement sans avoir à supprimer et à recréer des tables. Il vise à permettre des mises à niveau fluides de la base de données sans perte de données.
Chaque fois que vous modifiez
models.py
le fichier, vous devez migrer les donnéesmakemigrations
avec ces deux commandes.migrate
Après la migration, l'écriture du Modèle est terminée.
Résumer
Ce chapitre a une compréhension préliminaire du mode MTV de Django, a écrit le modèle modèle de l'article de blog Book
et l'a migré vers la base de données.
L'étape suivante consiste à View
avancer et à apprendre à appeler les données dans le modèle.