En el campo del desarrollo web Python, el framework Django es como una estrella brillante. Sus características completas, eficientes y seguras lo hacen popular en todo el mundo. Este artículo analizará exhaustivamente los archivos predeterminados del framework Django, y discutirá en profundidad el significado y el uso de cada archivo y su composición, y demostrará a fondo la estructura de archivos y los principios de diseño de este poderoso framework.
Primero, echemos un vistazo a la estructura de directorios después de crear un nuevo proyecto Django:
myproject/
manage.py
myproject/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
manage.py
: esta es una herramienta de línea de comandos para proyectos de Django que se puede usar para realizar muchas tareas relacionadas con la gestión y el desarrollo de proyectos, como ejecutar servidores, ejecutar pruebas, crear esquemas de bases de datos y más.myproject/__init__.py
: Este es un archivo vacío que se usa para decirle al intérprete de Python que el directorio es un paquete de Python.myproject/settings.py
: Este archivo contiene todas las configuraciones del proyecto. Cada proyecto de Django tiene su propia configuración donde puede configurar bases de datos, aplicaciones, middleware, plantillas, almacenamiento en caché y más.myproject/urls.py
: este archivo define las rutas URL para el proyecto. Al escribir patrones de URL y funciones de vista correspondientes, Django puede enrutar solicitudes HTTP a las vistas apropiadas.myproject/asgi.py
Ymyproject/wsgi.py
: estos dos archivos se usan para configurar el servidor, WSGI es la interfaz de puerta de enlace del servidor web de Python y ASGI es una interfaz de puerta de enlace de servidor asíncrono para procesar solicitudes asíncronas.
gestionar.py
En la estructura del proyecto de Django, manage.py
juega un papel muy importante. Es una herramienta de línea de comandos que le permite interactuar con proyectos de Django de varias maneras. Exploremos este archivo en profundidad y sus usos principales.
Primero, Django crea automáticamente un archivo cuando creamos un nuevo proyecto Django manage.py
. Se encuentra en el directorio raíz del proyecto y su objetivo principal es ser una utilidad de línea de comandos que encapsule la django-admin.py
funcionalidad del proyecto y que también contenga algunos comandos adicionales específicos del proyecto.
Veamos un manage.py
contenido de archivo típico:
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
Podemos ver que en manage.py
el archivo, el módulo de configuración de Django se define como una variable de entorno DJANGO_SETTINGS_MODULE
con un valor predeterminado de 'myproject.settings'. A continuación, intenta importar django.core.management
desde él execute_from_command_line
, que se utiliza para realizar tareas de gestión de línea de comandos.
Veamos algunos manage.py
usos comunes:
Ejecutar el servidor de desarrollo : al desarrollar localmente, a menudo necesitamos ejecutar el servidor de desarrollo que viene con Django. Puedes runserver
hacer esto con el comando:
python manage.py runserver
Esto iniciará el servidor de desarrollo, que está activado de forma predeterminada 127.0.0.1:8000
. Puede visitar esta dirección en su navegador para ver su sitio web.
Migraciones de base de datos : Django tiene una API de abstracción de base de datos muy poderosa que puede manejar muchas tareas relacionadas con la base de datos. Por ejemplo, cuando cambiamos el modelo (modelos), debemos aplicar estos cambios a la base de datos, lo que requiere la migración de la base de datos. He aquí cómo hacerlo manage.py
con:
python manage.py makemigrations # 创建迁移文件
python manage.py migrate # 应用迁移至数据库
Crear un superusuario : cuando necesitamos acceder al fondo de administración de Django, necesitamos crear un superusuario. Esto lo podemos hacer con el siguiente comando:
python manage.py createsuperuser
Django Shell : manage.py
también se proporciona un shell de Python interactivo, pero este shell se ejecuta en el entorno de Django. Esto significa que puede importar sus modelos, vistas, configuraciones, etc. en este shell, lo cual es muy útil para probar y depurar:
python manage.py shell
En el uso diario de Django, manage.py
es una herramienta muy importante. Hace que la interacción con los proyectos de Django sea muy fácil y encapsula muchas tareas comunes. Aprende a usarlo manage.py
, y tu desarrollo de Django será más fácil.
iniciar .py
En Python, __init__.py
el archivo tiene una posición importante, y su existencia le permite a Python reconocer la carpeta como un paquete (package). Este concepto es especialmente importante en la programación modular de Python, que nos permite organizar el código de forma más estructurada y proporciona una mejor gestión del espacio de nombres. Ahora, exploremos en profundidad __init__.py
qué hace y cómo usarlo.
Primero, veamos el __init__.py
archivo más simple, un archivo vacío. En un proyecto de Python, puede ver muchos de estos archivos. Se encuentran en el directorio del paquete y se denominan __init__.py
.
# mypackage/__init__.py
La existencia de este archivo vacío significa que el intérprete de Python tratará el directorio en el que se encuentra como un paquete (paquete), y este paquete puede contener otros módulos (módulo) o subpaquetes (subpaquete). Por ejemplo, si tenemos la siguiente estructura de proyecto:
mypackage/
__init__.py
module1.py
module2.py
En este caso, podemos importar el módulo así:
from mypackage import module1, module2
Además de marcar carpetas como paquetes, __init__.py
existen otros usos importantes. En términos generales, __init__.py
se utiliza para almacenar código de inicialización a nivel de paquete o definir un alias para facilitar la importación. Por ejemplo, podemos __init__.py
importar nuestros módulos en , para que estén directamente disponibles al importar el paquete:
# mypackage/__init__.py
from . import module1, module2
Luego podemos importar el paquete directamente sin importar el módulo por separado:
import mypackage
# 我们可以直接使用mypackage.module1,而不需要单独导入module1
mypackage.module1.some_function()
Además, __init__.py
se puede utilizar para definir __all__
variables. __all__
La variable es una lista de cadenas que definen qué módulos se importarán al importar * del paquete.
# mypackage/__init__.py
__all__ = ['module1', 'module2']
Ahora, cuando importamos así:
from mypackage import *
Solo module1
y module2
serán importados, otros módulos no lo serán.
En general, __init__.py
es una parte clave de la estructura del paquete de Python, lo que nos permite organizar y administrar mejor nuestro código. Comprender cómo funciona y cómo usarlo puede ayudarnos a escribir un código más modular y mantenible.
configuración.py
El framework Django es un framework web conocido por su modularidad y flexibilidad, muchos aspectos son configurables, y estas configuraciones se concentran en settings.py
archivos. En un proyecto de Django, settings.py
el archivo es crucial, contiene toda la información de configuración necesaria para que se ejecute el proyecto. Ahora, exploremos este archivo en profundidad y sus usos principales.
El archivo de un nuevo proyecto de Django settings.py
contiene muchas configuraciones predeterminadas, que son adecuadas para la mayoría de las situaciones, pero puede modificar estas configuraciones según sus necesidades. Estos son algunos de los ajustes más importantes:
DEBUG : esta configuración le dice a Django si debe ejecutarse en modo de depuración. En un entorno de desarrollo, generalmente establecemos esto en True, de modo que cuando algo sale mal, Django mostrará mensajes de error detallados. Sin embargo, en un entorno de producción, deberíamos establecerlo en False.
DEBUG = True
INSTALLED_APPS : esta configuración define todas las aplicaciones en el proyecto. Cada aplicación es un paquete de Python que contiene algunas vistas, modelos, plantillas, etc. Cuando creamos una nueva aplicación o instalamos una aplicación de terceros, la aplicación debe agregarse a esta lista.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Add your apps here
'myapp',
]
MIDDLEWARE : esta configuración define un conjunto de clases de middleware que desempeñan un papel importante en el procesamiento de solicitudes y respuestas. Puede agregar su propio middleware o modificar el orden de esta lista para cambiar el orden de ejecución del middleware.
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
BASES DE DATOS : Esta configuración define la configuración de su base de datos. Django usa ORM (Mapeo relacional de objetos) para manejar las operaciones de la base de datos, y puede usar cualquier backend de base de datos compatible con Django, como SQLite, PostgreSQL, MySQL, etc.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
PLANTILLAS : Esta configuración define la configuración de plantillas de Django, incluida la ubicación de plantillas, motores de plantillas y más.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
...
},
]
- STATIC_URL y STATIC_ROOT : estas dos configuraciones se usan para configurar cómo se manejan los archivos estáticos.
STATIC_URL
Define el prefijo de URL de los archivos estáticos ySTATIC_ROOT
define la ubicación de almacenamiento de los archivos estáticos.
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Los anteriores son solo settings.py
algunos ajustes básicos en el archivo. De hecho, hay más elementos de configuración en este archivo. Puede ajustar estas configuraciones según sus necesidades. Comprender settings.py
cómo funcionan los archivos y cómo usarlos es un paso clave para dominar Django.
urls.py
En el marco web de Django, urls.py
el archivo es una parte muy crítica, es responsable de la configuración del enrutamiento de URL, asegurando que la URL solicitada por el usuario pueda ser mapeada correctamente a la función o clase de vista correspondiente. En esta publicación, profundizaremos en urls.py
la estructura y el uso del archivo.
En un proyecto Django recién creado, urls.py
los archivos se encuentran en el directorio raíz del proyecto. Este archivo contiene una urlpatterns
lista denominada , cada elemento de la lista es una llamada de función path()
o re_path()
, y esta llamada de función define la relación de asignación entre un patrón de URL y una vista.
Aquí hay un urls.py
archivo simple:
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', views.hello_world),
]
En este archivo, primero django.urls
importamos path()
la función del módulo y luego definimos urlpatterns
la lista. Esta lista contiene dos patrones de URL. El primer patrón es que 'admin/'
está mapeado a la vista de administración integrada de Django, el segundo patrón es que 'hello/'
está mapeado a nuestra propia hello_world
vista definida.
path()
La función acepta dos parámetros obligatorios, el primero es una cadena de patrón de URL y el segundo es una función o clase de vista. También puede aceptar un tercer parámetro opcional, que es un diccionario que se puede usar para pasar parámetros adicionales para la vista.
Además de path()
funciones, django.urls
el módulo también proporciona re_path()
funciones que nos permiten definir patrones de URL usando expresiones regulares. Por ejemplo, el siguiente código define un patrón de URL que coincide con cualquier número:
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
]
En este ejemplo, la cadena de patrón de URL es una expresión regular que (?P<year>[0-9]{4})
dice hacer coincidir un número de cuatro dígitos y nombrarlo year
. En la función de vista year_archive
, podemos year
obtener este valor a través de parámetros.
urls.py
El archivo es una parte importante del proyecto Django, mapea la URL solicitada por el usuario a la vista correspondiente para manejar la solicitud del usuario. Comprender su principio de funcionamiento y uso puede ayudarnos a utilizar mejor el marco Django para crear aplicaciones web.
asgi.py
ASGI, el nombre completo de Asynchronous Server Gateway Interface, es una interfaz estándar de Python para crear aplicaciones web asíncronas. A partir de Django 3.0, Django comenzó a admitir ASGI, lo que nos permite usar la programación asíncrona en Django para mejorar el rendimiento de las aplicaciones web. En un proyecto Django, asgi.py
el archivo es el archivo de configuración ASGI, que define la aplicación ASGI y configura el middleware y el enrutamiento. Ahora, echemos un vistazo más profundo al asgi.py
archivo y su uso principal.
Primero, echemos un vistazo a los archivos en un proyecto Django recién creado asgi.py
:
"""
ASGI config for myproject project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_asgi_application()
En este archivo, primero configuramos la variable de entorno DJANGO_SETTINGS_MODULE
, que le dice a Django qué archivo de configuración debe usar. Luego, llamamos get_asgi_application()
a la función para obtener una aplicación ASGI y asignarla a application
la variable. Esta application
variable es el punto de entrada de la interfaz del servidor ASGI, y el servidor ASGI usará esta variable para iniciar nuestra aplicación Django.
Este asgi.py
archivo básico es suficiente para que nuestra aplicación Django se ejecute en un servidor ASGI como Daphne o Uvicorn. Sin embargo, el verdadero poder de ASGI radica en su naturaleza asíncrona. Podemos aprovechar esta función agregando middleware y enrutamiento asíncronos.
Por ejemplo, podemos agregar un middleware asíncrono para manejar conexiones Websocket:
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
import myapp.routing
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = ProtocolTypeRouter({
"http": get_asgi_application(),
"websocket": AuthMiddlewareStack(
URLRouter(
myapp.routing.websocket_urlpatterns
)
),
})
En este ejemplo, creamos una ProtocolTypeRouter
instancia que puede enrutar solicitudes según el tipo de protocolo. Para solicitudes HTTP, usamos la aplicación Django original; para solicitudes Websocket, usamos una pila de middleware y un enrutador de URL. AuthMiddlewareStack
Es un middleware que proporciona una función de autenticación y URLRouter
se utiliza para enrutar las solicitudes de Websocket.
En general, asgi.py
el archivo es el punto de entrada para la programación asíncrona de Django, que proporciona una forma de configurar aplicaciones ASGI, incluida la adición de middleware y enrutamiento. Comprender su principio de funcionamiento y uso puede ayudarnos a utilizar mejor la programación asincrónica en Django y mejorar el rendimiento de las aplicaciones web.
wsgi.py
WSGI, o Web Server Gateway Interface, es una interfaz común entre las aplicaciones de Python y los servidores web. En Django, wsgi.py
un archivo es un archivo de configuración para la interfaz WSGI que permite que un servidor web interactúe con una aplicación Django. En esta publicación, profundizaremos en wsgi.py
la estructura y el uso del archivo.
En un proyecto Django recién creado, wsgi.py
los archivos se encuentran en el directorio raíz del proyecto. Consta principalmente de dos partes: establecer variables de entorno DJANGO_SETTINGS_MODULE
y definir aplicaciones WSGI. Aquí hay wsgi.py
un ejemplo típico de un archivo:
"""
WSGI config for mysite project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = get_wsgi_application()
En este archivo, os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
esta línea de código establece una variable de entorno DJANGO_SETTINGS_MODULE
, que le dice a Django qué archivo settings.py debe usar.
Y application = get_wsgi_application()
esta línea de código define una aplicación WSGI. get_wsgi_application()
La función devuelve una aplicación WSGI que puede procesar solicitudes HTTP y generar respuestas HTTP. Aquí application
hay una variable global que es el punto de entrada para la interfaz del servidor WSGI.
Luego, puede usar un servidor WSGI para ejecutar su aplicación Django. Por ejemplo, con Gunicorn, puede ingresar el siguiente comando en la línea de comando:
gunicorn mysite.wsgi
Este comando inicia un servidor Gunicorn y carga las variables mysite.wsgi
en el módulo application
como una aplicación WSGI.
En conjunto, wsgi.py
el archivo es un archivo de configuración importante de Django que define la interfaz de la aplicación Django con el servidor WSGI. Al comprender cómo funciona este archivo, podemos comprender mejor cómo se ejecutan las aplicaciones Django y cómo implementar aplicaciones Django.
Si es útil, preste más atención a la cuenta pública personal de WeChat: [Perspectiva completa de Python] TeahLead_KrisChang, más de 10 años de experiencia en la industria de Internet e inteligencia artificial, más de 10 años de experiencia en tecnología y gestión de equipos comerciales, Tongji Software Licenciado en Ingeniería, Máster en Gestión de Ingeniería de Fudan, Arquitecto sénior de servicios en la nube certificado por Aliyun, Jefe de negocio de productos de IA con cientos de millones de ingresos.