Django crea un sistema de gestión de bibliotecas 03: escriba un modelo modelo para artículos de blog

inserte la descripción de la imagen aquí

El enfoque principal del marco Django es el modelo (Modelo), la plantilla (Plantilla) y la vista (Vistas), conocido como el patrón MTV.

Sus respectivas responsabilidades son las siguientes:

nivel responsabilidad
Model (Modelo), la capa de acceso a datos Manejar todo lo relacionado con los datos: cómo acceder, cómo verificar la validez, qué comportamientos se incluyen, la relación entre los datos, etc.
Plantilla (Template), la capa de lógica de negocios Maneja decisiones relacionadas con la presentación: cómo mostrar en una página u otro tipo de documento.
Ver (View), la capa de presentación La lógica asociada con el acceso al modelo y la llamada a la plantilla adecuada. Puente modelo y plantilla.

En pocas palabras, Model accede a los datos, View decide qué datos deben recuperarse y Template es responsable de mostrar los datos recuperados de manera razonable.

Base de datos y modelo

Una base de datos es un lugar para almacenar archivos electrónicos, almacenando colecciones de datos independientes. Una base de datos consta de varias tablas de datos .

¿Qué quieres decir? Por ejemplo, la lista de los estudiantes de la segunda clase del tercer grado es la tabla de datos . Algunas listas registran los puntajes de las pruebas de cada estudiante, algunas registran la altura y el peso, y algunas aficiones... Todas estas listas se colocan en el gabinete del maestro, que es la "base de datos"**.

Por defecto, la base de datos es el archivo db.sqlite3.

El funcionamiento de la base de datos utiliza sentencias complejas de SQL, que es otro lenguaje completamente diferente a Python, que sin duda es difícil para los novatos.

Afortunadamente, escribir aplicaciones web en Django no requiere que operes directamente la base de datos, sino que definas un modelo (¡solo usa la sintaxis de Python!), que contiene los comandos necesarios para operar la base de datos. Es decir, solo necesita definir el modelo de datos y no le importan otros códigos subyacentes, se generarán automáticamente a partir del modelo.

De hecho, tiene un término especial llamado mapeo relacional de objetos ( Object Relational Mapping , ORM para abreviar ), que se utiliza para realizar la conversión entre datos de diferentes tipos de sistemas en lenguajes de programación orientados a objetos.

Escribir modelo.py

Como se mencionó anteriormente, Django se asigna a la base de datos a través del modelo (Modelo) para manejar transacciones relacionadas con datos.

Abra book/models.pyel archivo e ingrese el siguiente código:

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

BookLa clase define la información de un libro: nombre del libro, precio del libro, fecha de publicación, editor de creación, introducción del libro, etc.

También podemos definir algún contenido adicional, Bookel comportamiento de los datos en la especificación:

# 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 clase interna Metadefine orderingcómo se organizan los datos. -bookUpdatedIndica que se organizarán en orden inverso al tiempo de creación, asegurando que los últimos artículos estén siempre en la parte superior de la página. Tenga en cuenta orderingque es una tupla, no olvide la coma al final cuando solo hay un elemento entre paréntesis.
  • __str__El método define el nombre que debe mostrarse cuando los datos necesitan ser representados. __str__Es importante agregar métodos a los modelos , los más comunes son los valores de visualización como objetos en el administrador de Django. Por lo tanto, siempre se debe devolver una cadena legible por humanos.

Felicitaciones, ha completado la mayor parte del modelo de datos básicos del sitio del blog.

El código tiene menos de 20 líneas, por lo que no lo parece en absoluto. Más tarde, me daré cuenta lentamente del poder de Django.

Las vistas y las plantillas se tratarán en breve.

Migración de datos (Migraciones)

Después de escribir el modelo, se requiere la migración de datos a continuación. Las migraciones son cómo los cambios que Django hace en sus modelos se propagan a la base de datos.

Configuración de MySQL en Django

Configure la conexión de la base de datos MySQL en el settings.pyarchivo del proyecto.

# settings.py

DATABASES = {
     
     
    'default': {
     
     
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_database_name',
        'USER': 'your_username',
        'PASSWORD': 'your_password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

inserte la descripción de la imagen aquí

Tenga en cuenta que la migración de datos es necesaria cada vez que se realiza un cambio (agregar, modificar, eliminar, etc.) en la base de datos.

El código de migración de Django se genera automáticamente a partir del archivo del modelo, que es esencialmente solo un registro histórico. Django puede usarlo para realizar actualizaciones continuas en la base de datos, de esta manera puede coincidir con el modelo actual.

En la terminal de PyCharm, ingrese python manage.py makemigrations, para crear una nueva tabla de migración para cambios de modelo:

(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> 

Al ejecutar makemigrationsel comando, Django detectará sus cambios en los archivos del modelo y almacenará los cambios como una migración.

Luego ingrese python manage.py migrate, para aplicar la migración a la base de datos :

(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 comprueba que la tabla se haya creado correctamente.
inserte la descripción de la imagen aquí

migrateEl comando selecciona todas las migraciones que aún no se han ejecutado y las aplica a la base de datos, es decir, los cambios en el modelo se sincronizan con la estructura de la base de datos. La migración es una característica muy poderosa que le permite cambiar continuamente la estructura de la base de datos durante el desarrollo sin tener que eliminar y crear tablas nuevamente. Se centra en permitir actualizaciones de bases de datos fluidas sin pérdida de datos.

Siempre que modifique models.pyel archivo, debe migrar los datos makemigrationscon estos dos comandos.migrate

Después de la migración, la escritura del Modelo está completa.

Resumir

Este capítulo tiene una comprensión preliminar del modo MTV de Django, escribió el modelo Model de la publicación del blog Booky lo migró a la base de datos.

El siguiente paso es Viewseguir adelante y aprender cómo llamar a los datos en el modelo.

Supongo que te gusta

Origin blog.csdn.net/mingfeng4923/article/details/131574417
Recomendado
Clasificación