Serie Django: Creación y configuración de aplicaciones Django (apps)

serie Django
Creación y configuración de aplicaciones Django (apps)

Autor : Li Juncai (jcLee95) : https://blog.csdn.net/qq_28550263
Correo electrónico: [email protected]
Dirección del artículo : https://blog.csdn.net/qq_28550263/article/details/132893616


【介绍】:应用是Django项目的组成部分,一个Django项目可以分为多个应用,本文讲解Django应用(app)的创建,并实际完成一个简单应用的配置和开发。

Sección anterior: " Análisis de configuración y estructura del proyecto de Django " | Sección siguiente: " Reglas de enrutamiento avanzadas de Django "


1. Información general

Una aplicación Django (App) es un componente modular de un proyecto Django que se utiliza para implementar funciones específicas. Un proyecto Django normalmente consta de múltiples aplicaciones, cada una con su propia funcionalidad y responsabilidades. En el artículo anterior, presentamos la diferencia entre aplicaciones y proyectos en Django y cómo crearlos usando herramientas de línea de comandos. A continuación, este artículo presentará de manera integral el uso relacionado de aplicaciones (aplicaciones) en Django y creará y completará una aplicación (aplicación) basada en un proyecto de Django.

2. Crea tu primera aplicación Django

Después de haber creado el directorio raíz de un proyecto Django e ingresado al directorio, puede seguir los siguientes pasos para crear una aplicación Django, configurarla, escribir código simple y finalmente ejecutarla.

2.1 Crear una aplicación Django

En el directorio raíz del proyecto Django (miproyecto en este caso), ejecute el siguiente comando para crear una aplicación Django:

python manage.py startapp myapp

Esto creará un myappdirectorio de aplicación llamado, que contiene la estructura básica de una aplicación Django.

Insertar descripción de la imagen aquí

2.2 Registrar la aplicación Django

Abra el archivo ubicado en el directorio raíz del proyecto myproject/settings.pyy busque INSTALLED_APPSConfiguración. Agregue su aplicación a esta lista:

INSTALLED_APPS = [
    # ...
    'myapp',  # 添加该项以注册应用,应用名即使用 startapp 指定的名称
]

Esto le indicará al framework Django que su aplicación existe en el proyecto actual.

2.3 Escribir modelos de datos (Modelos)

Defina su modelo en un archivo bajo myappel directorio . models.pyAquí hay un ejemplo:

from django.db import models

# 创建一个名为 MyModel 的 Django 数据模型类
class MyModel(models.Model):
    # 定义一个名为 name 的字段,类型为 CharField,最大长度为 100 个字符
    name = models.CharField(max_length=100)
    
    # 定义一个名为 description 的字段,类型为 TextField,用于存储文本数据
    description = models.TextField()

    # 定义一个特殊方法 __str__,用于返回对象的字符串表示,通常在管理界面中显示对象时使用
    def __str__(self):
        # 返回对象的 name 属性作为字符串表示
        return self.name

2.4 Crear vistas (Vistas)

Cree la función de vista en un archivo en myappel directorio . views.pyHe aquí un ejemplo sencillo:

from django.http import JsonResponse
from .models import MyModel

# 导入 Django 的 render 函数,用于渲染 HTML 模板
from django.shortcuts import render

def my_view(request):
    # 查询 MyModel 中的所有对象
    my_objects = MyModel.objects.all()

    # 创建一个包含所有对象信息的列表
    data = []
    for obj in my_objects:
        data.append({
    
    
            'name': obj.name,
            'description': obj.description,
        })

    # 返回 JSON 响应
    return JsonResponse(data, safe=False)

2.5 Asignar URL a la aplicación

El enrutamiento de Django es jerárquico: primero puede asignar una ruta a la aplicación, es decir, usar incluedeuna función para incluir un archivo en una aplicación específica como el archivo de enrutamiento de la subaplicación. Sin embargo, esto no es necesario. En teoría, si el proyecto es lo suficientemente simple, el archivo de enrutamiento raíz del proyecto (archivo urls.py en el directorio de inicio del proyecto) se puede usar directamente sin crear una aplicación para todo el proyecto. El directorio de inicio se refiere a la raíz del proyecto (directorio con el mismo nombre que el proyecto) asigna vistas directamente. Se puede ver que esto en realidad completa el trabajo del Controlador (programador) en el marco MVC.

En un archivo en el directorio raíz del proyecto myproject/urls.py, incluya la URL de su aplicación en el proyecto:

from django.contrib import admin

# 导入 Django 的 URL 路由和包含模块
from django.urls import path, include

# 定义 URL 映射关系列表 urlpatterns
urlpatterns = [
    # 当用户访问 /admin/ 路径时,将请求交给 admin.site.urls 处理
    path('admin/', admin.site.urls),
    
    # 添加这行:当用户访问 /myapp/ 路径时,将请求交给 myapp.urls 模块中定义的 URL 处理
    path('myapp/', include('myapp.urls')),
]

La solicitud path('myapp/', include('myapp.urls'))se asigna a una aplicación llamada myapp y la asignación de URL de la aplicación se define en el myapp.urlsmódulo (urls.py en la aplicación myapp).
De esta manera, una vez que el usuario accede /myapp/a la ruta, myapp.urlsla solicitud se manejará mediante el manejo de URL en el módulo, lo que permite a la aplicación definir sus propias vistas y funciones y asociarlas con el mapeo de URL del proyecto principal.

2.6 Asignar URL a vistas en la aplicación

myappCree un archivo nombrado en el directorio y urls.pyagregue el siguiente contenido:

from django.urls import path
from . import views

# 都将继承app路由 'myapp/'
urlpatterns = [
    # 为# views模块下的视图 my_view 分配路由 'myapp/myview/'
    path('myview/', views.my_view, name='my_view'),  
]

Puede especificar múltiples asignaciones de rutas en la lista de patrones de URL para views.pyasignar rutas a diferentes funciones de vista o métodos de vista en formato .

2.7 Crear tabla de base de datos (migrar)

Ejecute el siguiente comando para crear la tabla de la base de datos:

python manage.py makemigrations # 创建数据库模型的迁移文件
python manage.py migrate # 应用数据库迁移

Esto creará una tabla de base de datos basada en lo que se define en el modelo.

Insertar descripción de la imagen aquí
De forma predeterminada, no necesita instalar ninguna otra base de datos, se generará automáticamente un archivo de base de datos SQLite. La base de datos SQLite es una base de datos liviana que se usa comúnmente para dispositivos móviles e incrustación de aplicaciones. De forma predeterminada, se guardará en el directorio raíz del proyecto después de generarse:

Insertar descripción de la imagen aquí

Aquí utilizo el software SQLiteSpy para abrirlo:

Insertar descripción de la imagen aquí
Puedes ver la tabla correspondiente a la aplicación actual: myapp_mymodel. Entre ellos myappse encuentra el nombre de la aplicación actual, mymodelque corresponde al modelo de datos actual, se expresa en minúsculas y está separado de la aplicación por un guión bajo. Si define varias clases de modelo de datos en una aplicación (aplicación) Django, pero después de realizar la migración, también se generarán las tablas de datos correspondientes con nombres similares.

Cabe señalar que si no se utiliza su modelo de datos, el archivo de migración de datos no se generará durante la migración de datos y la migración de datos de la aplicación posterior no se producirá en consecuencia. Por ejemplo, si la función de vista se cambia a:

from django.http import HttpResponse
def my_view(request):
   return HttpResponse("Hello, Django!")

Esto no utiliza el modelo de datos en absoluto, también puede funcionar, pero no realizará la migración de datos y las tablas relacionadas no se crearán en la base de datos correspondiente.

No solo Django, muchos marcos similares proporcionan comandos o interfaces de programación similares durante la ejecución. en:

1. comando hacer migraciones

El comando makemigrations se utiliza para crear archivos de migración para modelos de bases de datos. Los archivos de migración contienen instrucciones sobre cómo cambiar el modelo de base de datos.

Si Django no detecta ningún cambio en los modelos de la base de datos (Modelos), verá "No se detectaron cambios" después de ejecutar el comando para crear un archivo de migración:

No changes detected

2. comando de migración

El comando de migración se utiliza para aplicar migraciones de bases de datos para sincronizar el esquema de la base de datos con el modelo de la aplicación .

Cuando ejecuta el comando de migración, Django examina todos los archivos de migración y usa las instrucciones en esos archivos para crear, modificar o eliminar tablas de bases de datos para que sean consistentes con la definición de su modelo.

El comando de migración ejecuta los archivos de migración de forma secuencial, comenzando con la migración más antigua y aplicando los cambios de forma incremental para garantizar que la base de datos permanezca coherente con el estado actual de la aplicación.

2.8 Acceder a nuestras aplicaciones en un navegador

Ahora puedes ejecutar el servidor de desarrollo de Django para ver la aplicación:

python manage.py runserver

Visita http://localhost:8000/myapp/myview/para ver "¡Hola, Django!" en tu navegador. Este es el proceso básico para crear y ejecutar una aplicación Django simple. Esta aplicación se puede ampliar y personalizar para satisfacer sus necesidades.

Insertar descripción de la imagen aquí

Debido al uso de JsonResponse , los navegadores más recientes ofrecen automáticamente la opción de una hermosa salida de JSON. Sin embargo, como aquí no tenemos datos, lo que vemos es un "[]".

Podemos agregar datos manualmente en el administrador más adelante para ver algunos efectos, pero aquí insertamos datos de dos maneras, una es Django Shell y la otra usa lenguaje SQL. Si está utilizando lenguaje SQL, necesita un pequeño software que pueda abrir la base de datos SQLite (si está utilizando otras bases de datos, también puede utilizar el software correspondiente o la herramienta Sell)/

Insertar datos usando Django Shell

Dado que la tabla se crea a través del modelo de datos MyModel , podemos insertar datos en los siguientes pasos:

  1. Ejecute el siguiente comando en el directorio raíz del proyecto para abrir Django Shell:
python manage.py shell
  1. Importa tu clase de modelo MyModel:
from myapp.models import MyModel
  1. Cree nuevos registros de datos y guárdelos. Puede utilizar el createmétodo de la clase modelo o crear una instancia directamente de la clase modelo y llamar saveal método. Aquí hay un código de muestra:
# 使用 create 方法创建新记录
MyModel.objects.create(name="记录1", description="这是记录1的描述")
MyModel.objects.create(name="记录2", description="这是记录2的描述")

# 或者直接实例化模型类并保存
record3 = MyModel(name="记录3", description="这是记录3的描述")
record3.save()
  1. Salga de Django Shell:
exit()

Como se muestra en la imagen:
Insertar descripción de la imagen aquí

Ahora, ha insertado manualmente varios datos en MyModella tabla, como se muestra en la figura:

Insertar descripción de la imagen aquí

Puede agregar más registros de datos según sea necesario. Estos datos permanecerán en la base de datos y podrán consultarse y utilizarse en su aplicación.
Ahora, vuelva a ejecutar el servidor de desarrollo:

python manage.py runserver

Abra el navegador nuevamente e ingrese a la página http://127.0.0.1:8000/myapp/myview/. Puede ver que el resultado mostrado ya no es una matriz vacía:

Insertar descripción de la imagen aquí
¿Es un poco inesperado y parece que el código está confuso? ——En realidad no, es solo que se ha codificado el chino normal.

Aquí es cuando accedes a http://127.0.0.1:8000/myapp/myview/, tu función de vista devuelve una respuesta en formato JSON. Esto se debe a que se utiliza en la función de vista JsonResponsey devuelve datos JSON que contienen los datos del modelo. El modo de visualización de datos JSON es el predeterminado, que se representa en codificación Unicode. Es por eso que ves caracteres de escape Unicode en tu navegador.

Si desea mostrar datos JSON de una manera más legible en su navegador, puede agregar una extensión de navegador o usar un visor JSON en línea. Estas herramientas pueden formatear y mostrar datos JSON en una forma más legible.

Cabe señalar que este método solo se aplica a la inserción de datos de inicialización o datos de prueba. En un entorno de producción real, los datos generalmente se agregan dinámicamente a través de la interfaz de usuario u otros medios.

Insertar datos directamente usando SQL

También podemos ingresar directamente declaraciones SQL para insertar datos a través de herramientas de administración de bases de datos, como MySQL Workbench, pgAdmin (para PostgreSQL), SQLiteSqy de SQLite, etc. Por ejemplo, lo siguiente es insertar datos en SQLiteSqy:

Insertar descripción de la imagen aquí
Las frases más importantes son:

INSERT INTO myapp_mymodel (name, description)
VALUES
  ('记录1', '这是记录1的描述'),
  ('记录2', '这是记录2的描述'),
  ('记录3', '这是记录3的描述');

3. Utilice plantillas en su aplicación

Cree una carpeta llamada plantillas en el directorio de su aplicación para almacenar sus archivos de plantilla HTML. my_template.htmlComo ejemplo, aquí creamos un archivo HTML nombrado en el directorio y editamos su contenido de texto de la siguiente manera:

<!-- my_template.html -->

<!DOCTYPE html>
<html>
<head>
    <title>我的模板</title>
</head>
<body>
    <h1>欢迎来到{
   
   { site_name }}网站</h1>
    <p>今天是{
   
   { current_date }}</p>
    
    <ul>
        {% for item in items %}
            <li>{
   
   { item }}</li>
        {% endfor %}
    </ul>
    
    <p>总价: ${
   
   { total_price|floatformat:2 }}</p>
</body>
</html>

En este ejemplo, utilizamos la sintaxis de plantilla proporcionada por Django. Las llaves dobles representan la sintaxis de interpolación y el medio es el nombre de la variable de Python, que representa el valor insertado. Los lectores que han aprendido el front-end, de hecho, muchos Todos ellos son iguales, como en el marco Vue . Se utiliza esta interpolación. Este método de interpolación se llama sintaxis de interpolación Moustache . Por ejemplo en este caso:

  • { { site_name }}: Esta es la sintaxis de interpolación utilizada para insertar el valor de una variable en la plantilla.
  • { { current_date }}: También es una sintaxis de interpolación, utilizada para insertar el valor de la fecha actual.

{ { total_price|floatformat:2 }}Se utiliza la sintaxis de filtro de las plantillas de Django. Este ejemplo formatea la variable precio_total como un número de punto flotante con dos decimales. Una característica de la sintaxis del filtro es que |a continuación se indican las condiciones de filtrado para las variables anteriores.

{% for item in items %}La declaración de bucle que forma {% endfor %}una plantilla es similar a la directiva vue-for en el marco de front-end Vue .

En este ejemplo:

<ul>
  {% for item in items %}
    <li>{
   
   { item }}</li>
  {% endfor %}
</ul>

Esta declaración itera sobre una lista denominada elementos e inserta elementos en la lista en cada iteración.

A continuación, agregamos una nueva función de vista en esta aplicación views.pyy usamos esta plantilla HTML en la función de vista para devolver la solicitud HTTP:

# 新增到 views.py
from django.shortcuts import render

def my_template_view(request):
    site_name = "我的Django网站"
    current_date = "2023-09-15"
    items = ["物品1", "物品2", "物品3"]
    total_price = 123.45

    context = {
    
    
        'site_name': site_name,
        'current_date': current_date,
        'items': items,
        'total_price': total_price,
    }
    return render(request, 'my_template.html', context)

Entre ellos, render es una función de vista en el marco de Django, que se utiliza para renderizar plantillas HTML y generar respuestas HTTP. Su función principal es combinar la plantilla con datos para generar la página HTML final y luego devolver la página al navegador del cliente como una respuesta HTTP.

A continuación, agregue la ruta de la función de vista my_template_view en los patrones de URL del archivo urls.py de la aplicación actual:

from django.urls import path
from . import views

urlpatterns = [
    path('myview/', views.my_view, name='my_view'),
    # 新增
    path('my_template_view/', views.my_template_view, name='my_template_view'),
]

A continuación, también necesitamos cambiar la configuración del proyecto Django. Abra el proyecto settings.pyy TEMPLATESagréguelo bajo el elemento de configuración para permitir que Django encuentre las carpetas 'APP_DIRS': True,en cada aplicación (app) para obtener archivos de plantilla:templates

TEMPLATES = [
    {
    
    
        # ...
        'APP_DIRS': True,
    },
]

Insertar descripción de la imagen aquí

APP_DIRSIndica si el motor Django debe buscar archivos fuente de plantilla en las aplicaciones instaladas, así que asegúrese de que la INSTALLED_APPSaplicación actual se haya instalado (registrada) en tales como:
Insertar descripción de la imagen aquí
De esta manera, cuando ejecute python manage.py runserver, el acceso http://127.0.0.1:8000/myapp/my_template_view/verá el siguiente efecto:

Insertar descripción de la imagen aquí

De lo contrario, es posible que se muestre un error de plantilla no encontrada durante el acceso, como por ejemplo:

Insertar descripción de la imagen aquí
Además, a veces Django puede almacenar en caché los resultados de búsqueda de plantillas. Un consejo de depuración común en el desarrollo es que si confirma que ha cambiado el código correcto, pero el nuevo efecto nunca se representa, puede usar el comando para borrar el caché de Django clearcache:

python manage.py clearcache

4. Administrar la aplicación en Django Admin

El administrador de Django es una función poderosa que genera automáticamente una interfaz de administración de backend y permite a los desarrolladores administrar fácilmente los datos del sitio web, incluidos los datos del modelo en la base de datos.

4.1 Creación de superusuario

Antes de usar el administrador de Django, primero debe crear una cuenta de superusuario para poder iniciar sesión en la interfaz de administración en segundo plano del administrador y realizar operaciones de administración. Se puede crear un superusuario usando el siguiente comando:

python manage.py createsuperuser

Luego, siga las indicaciones para ingresar su nombre de usuario, dirección de correo electrónico y contraseña para crear una cuenta de superusuario. Por ejemplo:

Insertar descripción de la imagen aquí
Como demostración, utilicé deliberadamente una contraseña que era demasiado corta. Puedes ver que Django solicitó esto, diciendo:
Esta contraseña es demasiado corta. Debe contener al menos 8 caracteres. Esta contraseña es demasiado corta. Debe contener al menos 8 caracteres.
Esta contraseña es demasiado común. Esta contraseña es demasiado común.
Esta contraseña es completamente numérica. Esta contraseña es completamente numérica.
Sin embargo, pasamos por: ¿
Omitir la validación de contraseña y crear usuario de todos modos?
Responda "Y" para confirmar.

4.1 Modelo de registro

si no hay derecho

Para administrar los datos del modelo en la interfaz de administración en segundo plano, el modelo debe estar registrado en admin.pyun archivo. En el archivo admin.py de su aplicación, importe los modelos relevantes y admin.site.registerregístrelos usando la función.

Tenga en cuenta que si no lo registra en admin.py, no podrá ver nuestro modelo después de iniciar sesión en la interfaz de administración a continuación:
Insertar descripción de la imagen aquí
Grupo (grupo de usuarios) y Usuarios (usuario) en la imagen son ambos modelos propios de Django. aplicación de gestión, y No hay ningún modelo que definamos.

# myapp 应用的 admin.py
from django.contrib import admin
from .models import MyModel

# Register your models here.
admin.site.register(MyModel)

4.3 Acceder al fondo de administrador

Acceda a la interfaz de administración en segundo plano en el navegador y ejecute el servidor de desarrollo (comando runserver) en la URL, que generalmente es http://127.0.0.1/admin/. Puede iniciar sesión utilizando la cuenta de superusuario creada anteriormente. Por ejemplo, aquí visitamos http://127.0.0.1:8000/admin:

Insertar descripción de la imagen aquí

Como aún no ha iniciado sesión, la administración de permisos de Django lo redirigirá automáticamente a la ruta de inicio de sesión del administrador, es decir http://127.0.0.1:8000/admin/login/?next=/admin/. Solo necesitamos ingresar aquí el nombre de superusuario creado previamente y la contraseña correspondiente para ingresar a la página de inicio del administrador.

Insertar descripción de la imagen aquí
Puede ver que el modelo de datos MyModels en la aplicación myapp se muestra en Admin (como Mis modelos).

4.4 Gestión de datos del modelo

Haga clic en el modelo de datos (Mis modelos) a continuación en la aplicación myapp para ver:

Insertar descripción de la imagen aquí
Puedes ver los datos añadidos anteriormente.

Puedes hacer lo siguiente:

  • Ver datos : en el fondo de administración, puede ver los datos del modelo en la base de datos, presentados en listas, detalles u otras formas.

  • Agregar datos : Puede agregar nuevos registros de datos, completar los campos y guardar.

  • Editar y actualizar datos : los registros de datos existentes se pueden editar y guardar los cambios.

  • Eliminar datos : puede eliminar registros de datos que ya no sean necesarios.

4.5 Personalizar la interfaz de administración

La interfaz de administración de Django se puede personalizar para satisfacer necesidades específicas. Puede definir la clase de administración del modelo en el archivo admin.py y personalizar la visualización de campos, el filtro, la búsqueda, la clasificación y otras opciones para cambiar la forma en que se presenta el modelo en la interfaz de administración.

from django.contrib import admin
from .models import MyModel

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('name', 'description')

admin.site.register(MyModel, MyModelAdmin)

4.6 Funciones ampliadas

También puede utilizar bibliotecas y complementos de terceros para ampliar la funcionalidad del administrador de Django, como django-import-export para importar y exportar datos, o django-grappelli para embellecer la interfaz de administración.

Por ejemplo, puedes instalar y usar django-grappelli:

pip install django-grappelli

Luego regístrelo en INSTALLED_APPS en settings.py:

INSTALLED_APPS = (
    'grappelli',
    'django.contrib.admin',
    # ...
)

Luego asigna rutas:

from django.conf.urls import include

urlpatterns = [
    path('grappelli/', include('grappelli.urls')), # grappelli URLS
    path('admin/', admin.site.urls),
]

Luego registre el controlador de contexto de la plantilla:

TEMPLATES = [
    {
    
    
        ...
        'OPTIONS': {
    
    
            'context_processors': [
                ...
                'django.template.context_processors.request',
                ...
            ],
        },
    },
]

Cuando se utiliza oficialmente para la implementación del servidor, puede utilizar los siguientes métodos para recopilar archivos multimedia:

python manage.py collectstatic

Con la misma función, la interfaz de administración ha sido "embellecida", por ejemplo, cuando visite " http://127.0.0.1:8000/admin/myapp/mymodel/" nuevamente, podrá ver:
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_28550263/article/details/132893722
Recomendado
Clasificación