Distribución de rutas de Django

Prefacio:

Ya hemos aprendido los conceptos básicos de Django. Hoy continuaremos aprendiendo. Lo que estamos aprendiendo hoy es la distribución de enrutamiento:

La distribución de rutas es un concepto central en el marco web. Se refiere al proceso de asignar diferentes solicitudes de URL a las funciones de procesamiento correspondientes (vistas). En marcos web como Django, la distribución de rutas se urls.pylogra mediante la configuración de URL (generalmente definida en un archivo).

1. ¿Qué es la distribución de rutas?

  1. Definir patrones de URL : en Django, la distribución de rutas generalmente se logra definiendo una serie de patrones de URL. Estos patrones especifican la estructura de las URL y qué funciones de visualización deben llamarse cuando se accede a esas URL.

  2. Mapeo de vistas : cada patrón de URL está asociado con una función o clase de vista. Cuando una URL solicitada coincide con un patrón, Django llama a la función de vista asociada a ella para manejar la solicitud.

  3. Distribución de solicitudes : el propósito de la distribución de rutas es distribuir la solicitud del usuario a la función de vista correcta. Este proceso es dinámico y se determina en función de la URL solicitada.

  4. Organizar URL : la distribución de rutas ayuda a organizar la estructura de URL de su proyecto, haciéndola clara y fácil de mantener. Al asignar URL a vistas, los desarrolladores pueden crear aplicaciones web lógicamente claras.

2. Distribución de rutas en Django

En Django, la distribución de rutas se logra mediante los siguientes pasos:

  1. Configuración de URL raíz : en el directorio raíz del proyecto, generalmente hay un urls.pyarchivo que contiene la configuración de enrutamiento principal del proyecto.

  2. Contiene enrutamiento de aplicaciones : en el urls.pyarchivo raíz, puede utilizar include()funciones para distribuir solicitudes a diferentes aplicaciones. Esto permite que cada aplicación tenga su propia configuración de enrutamiento, lo que hace que la estructura del proyecto sea más modular.

  3. Configuración de URL de la aplicación : cada aplicación puede tener su propio urls.pyarchivo que define las reglas de enrutamiento para la aplicación.

  4. Expresiones regulares y expresiones de ruta : Django le permite definir patrones de URL usando expresiones regulares (a través de re_path()funciones) o expresiones de ruta (a través de funciones).path()

  5. Rutas con nombre : se pueden nombrar las rutas para que se pueda hacer referencia a ellas fácilmente en plantillas y vistas.

  6. Redirección : la distribución de rutas también se puede utilizar para implementar la redirección de URL.

2.1 Configuración de enrutamiento a nivel de aplicación

Cada aplicación Django puede tener un urls.pyarchivo que se utiliza para definir la configuración de enrutamiento de la aplicación.

# UrlApp/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('index/', views.index),
]

En este ejemplo, UrlAppes el nombre de una aplicación y viewsel módulo de esa aplicación lo que define la vista. urlpatternsEs una lista que contiene todas las reglas de enrutamiento para la aplicación. Cada regla de enrutamiento path()se define mediante una función que acepta un patrón de URL y una función de visualización.

2.2 Distribución de rutas de proyectos

En el urls.pyarchivo raíz del proyecto, puede distribuir solicitudes a diferentes aplicaciones. Esto se include()logra mediante funciones.

# 项目的根目录 urls.py
from django.urls import path, include

urlpatterns = [
    path('urlapp/', include('UrlApp.urls')),
    path('urlapp2/', include('UrlApp2.urls')),
]

La función aquí include()se utiliza para incluir otro módulo de configuración de URL. Cuando Django maneja una solicitud, mira la lista urls.pyen la raíz urlpatterns. Si se encuentra una ruta coincidente, distribuye aún más la solicitud a la configuración de enrutamiento de la aplicación especificada.

  • path('urlapp/', include('UrlApp.urls')): Esta línea de código define una regla de enrutamiento. Cuando un usuario accede a ella /urlapp/, Django buscará el archivo UrlAppen la aplicación urls.pyy lo utilizará urlpatternspara procesar aún más la solicitud.

  • path('urlapp2/', include('UrlApp2.urls')): Nuevamente, esta línea de código UrlApp2define un prefijo de enrutamiento para la aplicación /urlapp2/. Todas las URL que comiencen con este prefijo se entregarán a UrlApp2los archivos de la aplicación urls.pypara su procesamiento.

2.3 Utilice expresiones regulares para hacer coincidir rutas

Las funciones de Django re_path()permiten hacer coincidir patrones de URL utilizando expresiones regulares.

# 使用正则表达式匹配路由
from django.urls import re_path
from django.http import HttpResponse
from myapp import views

urlpatterns = [
    re_path(r'^[A-Za-z]+/$', views.re_view),
]

def re_view(request):
    return HttpResponse('这个视图的路由是英文字母响应')

En este ejemplo, la expresión regular r'^[A-Za-z]+/$'coincide con cualquier URL que comience y termine con una o más letras en inglés. La parte de la letra coincidente se pasa a re_viewla función de vista. Esta es una representación general de expresiones regulares.

2.4 paso de parámetros de URL

Las funciones de Django path()permiten definir parámetros en la URL y pasarlos a funciones de visualización.

# URL参数传递
from django.urls import path

urlpatterns = [
    path('demo/<urldata>/', views.get_url_data),
]

def get_url_data(request, urldata):
    return HttpResponse(f'从 URL 中获取到的参数为:{urldata}')

En este caso, <urldata>es un parámetro de ruta dinámica, que se reemplaza con la parte de la URL real y se pasa como parámetro a get_url_datala función de vista.

2.5 Llevar datos adicionales en asignaciones de URL

path()La función o re_path()puede aceptar un diccionario como tercer parámetro, que se pasará a la función de vista como datos adicionales.

urlpatterns = [
    path('extra/', views.extra, {'age': 28}),
]

def extra(request, age):
    return HttpResponse(f'从 url 映射方法中获取到的附加数据为:{age}')

En este ejemplo, el diccionario {'age': 28}se pasa a extrala función de vista.

2.6 Parámetros predeterminados

Las funciones de visualización pueden aceptar valores de parámetros predeterminados. Si los parámetros correspondientes no se proporcionan en la URL, se utilizarán los valores predeterminados.

urlpatterns = [
    path('default/', views.default_data),
    path('default/<data>/', views.default_data),
]

def default_data(request, data=369):
    return HttpResponse(f'从 URL 中获取到的参数为:{data}')

 En este ejemplo, si no datase proporcionan parámetros en la URL, la función de vista utilizará el valor predeterminado 369.

2.7.Convertidor de enrutamiento

Django proporciona algunos convertidores de rutas integrados para convertir parámetros de URL en tipos de datos específicos.

urlpatterns = [
    path('int/<int:data>/', views.int_view),
    path('str/<str:data>/', views.str_view),
    path('path/<path:data>/', views.path_view),
    path('slug/<slug:data>/', views.slug_view),
    path('uuid/<uuid:data>/', views.uuid_view),
]

def int_view(request, data):
    return HttpResponse(f'使用 int 转换器,接收到的数据为:{data}')

def str_view(request, data):
    return HttpResponse(f'使用 str 转换器,接收到的数据为:{data}')

def path_view(request, data):
    return HttpResponse(f'使用 path 转换器,接收到的数据为:{data}')

def slug_view(request, data):
    return HttpResponse(f'使用 slug 转换器,接收到的数据为:{data}')

def uuid_view(request, data):
    return HttpResponse(f'使用 uuid 转换器,接收到的数据为:{data}')
  • int: Coincide con números enteros positivos y convierte el parámetro a un tipo de número entero.
  • str: Coincide con cadenas que no están vacías.
  • path: Coincide con cualquier cadena que no esté vacía, incluidas las barras.
  • slug: Coincide con letras, números, guiones bajos y guiones.
  • uuid: Coincide con identificadores universalmente únicos (UUID).

3. Ruta de análisis inverso:

El enrutamiento de análisis inverso es una característica muy útil en Django, que le permite construir URL dinámicamente a través del nombre de la función de vista (es decir, el nombre del patrón de la URL) en lugar de codificar directamente la cadena de URL. Este enfoque mejora la capacidad de mantenimiento y la flexibilidad del código, especialmente cuando necesita cambiar la estructura de la URL; solo necesita modificar urls.pyla ruta en el archivo en lugar de buscar y reemplazar las URL codificadas en todo el proyecto.

En Django, el enrutamiento de resolución inversa es una forma de recuperar URL dinámicamente que le permite hacer referencia a URL en plantillas y vistas utilizando nombres legibles por humanos en lugar de rutas codificadas. Este enfoque mejora la mantenibilidad y legibilidad del código.

3.1 Rutas de análisis inverso en plantillas HTML

En la plantilla, puede utilizarla {% url 'URL的模式名称' 参数 %}para analizar la ruta de forma inversa.

<body>
    反向解析路由<br>
    <a href="{% url 'num' %}">点击开奖</a><br>
    <a href="{% url 'age' 28 %}">不要点击</a><br>
</body>

Aquí, 'num'y 'age'están los nombres de patrones de las URL, que corresponden a la configuración de URL de la vista.

3.2 Analizar rutas de forma inversa en la vista

En la vista, puede utilizar reverse('URL的模式名称')para obtener la URL.

from django.urls import reverse
from django.http import HttpResponse
from django.shortcuts import redirect

def text(request):
    return HttpResponse(f'视图解析路由:{reverse("num")}')

def redirect_reverse(request):
    return redirect(reverse("num"))

def text_data(request, data):
    return HttpResponse(f'视图解析路由:{reverse("age", args=[data])}')

reverseLa función acepta el nombre del patrón de la URL y una lista de parámetros opcional o un diccionario de parámetros de palabras clave, y devuelve la URL correspondiente.

3.3Nombre del patrón URL

En urls.py, puedes definir un nombre de patrón para una URL asignando valores a los parámetros pathde la función .name

from django.urls import path
from . import views

urlpatterns = [
    path('index/', views.index),
    path('html/', views.html_view),
    path('number/', views.number, name='num'),
    path('age/<data>/', views.data_view, name='age'),
]

3.4.Espacio de nombres de la aplicación URL

En proyectos grandes, diferentes aplicaciones pueden tener diferentes configuraciones de URL. Para evitar conflictos de nombres de patrones de URL, Django le permite definir un espacio de nombres para cada aplicación.

3.5 Definir el espacio de nombres de la aplicación

En los archivos de su aplicación urls.py, puede definir una app_namepropiedad para establecer el espacio de nombres de la aplicación.

app_name = 'urlapp2'

3.6 Uso de espacios de nombres de aplicaciones en plantillas

Al realizar el análisis inverso de una URL que pertenece a un espacio de nombres de aplicación específico en una plantilla, debe especificar el espacio de nombres de la aplicación y el nombre del patrón de la URL.

<body>
    <a href="{% url 'urlapp2:num' %}">点击开奖</a><br>
    <a href="{% url 'urlapp2:age' 28 %}">不要点击</a><br>
</body>

Aquí 'urlapp2'está el espacio de nombres de la aplicación 'num'y 'age'el nombre del patrón de la URL.

3.7 Uso de espacios de nombres de aplicaciones en vistas

En la vista, también debe utilizar el nombre del patrón de URL con el espacio de nombres de la aplicación para resolver la URL en sentido inverso.

def text(request):
    return HttpResponse(f'视图解析路由:{reverse("urlapp2:num")}')

def redirect_reverse(request):
    return redirect(reverse("urlapp2:num"))

def text_data(request, data):
    return HttpResponse(f'视图解析路由:{reverse("urlapp2:age", args=[data])}')

El enrutamiento de resolución inversa es una característica poderosa de Django que le permite crear URL dinámicamente en lugar de codificarlas. Al definir nombres de esquemas de URL y espacios de nombres de aplicaciones, puede evitar conflictos de URL y hacer que su código sea más claro y fácil de mantener.

Conclusión:

Hoy compartiré la parte sobre la distribución de enrutamiento de Django aquí. Esta distribución de enrutamiento es muy importante en todo el marco de Django, porque la distribución de enrutamiento puede mejorar la flexibilidad y la capacidad de mantenimiento de su código. Sin embargo, debido al nivel del editor, es limitado. Es inevitable que haya algunas omisiones en este contenido sobre la distribución de enrutamiento. Espero que puedan brindarme más apoyo. También agradezco las correcciones de los jefes y el editor las aceptará con humildad. Eso es todo para compartir hoy. ¡Hasta la próxima!

Supongo que te gusta

Origin blog.csdn.net/yz_518/article/details/142703369
Recomendado
Clasificación