Análisis inverso de la ruta de Django

Con el aumento de funciones, si cambia la URL de la capa de enrutamiento, es necesario cambiar la URL de la capa de vista y la capa de plantilla correspondientes, lo cual es muy problemático e inconveniente de mantener.

¿Por qué necesita cambiar las URL de la capa de vista y la capa de plantilla correspondientes cuando cambia la URL de la capa de enrutamiento?
①Imagine una situación en la que ingresa una cadena de direcciones URL en el navegador y el servidor selecciona un html (plantilla) con un formulario de las plantillas (capa de plantilla) a través de los pasos del diagrama de flujo a continuación y lo devuelve a su navegador Después de completar el formulario, haga clic en Enviar. Supongamos que los datos del formulario deben enviarse a una URL fija, pero esta URL fija se modifica en la capa de enrutamiento, ¿a dónde irán los datos del formulario?
②Del mismo modo, en la capa de vista, si desea saltar a otra página, la función de redirección escribe una cadena fija, similar al índice a continuación. Luego, si la URL relacionada con el índice en la capa de enrutamiento se cambia a indexx, no se encontrará la página redirigida.
def runoob (solicitud): retorno de redirección ("/ índice /")

inserte la descripción de la imagen aquí

En este momento, podemos usar el análisis inverso. Cuando la URL de la capa de enrutamiento cambia, la URL cambiada se analiza inversamente de forma dinámica en la capa de vista y la capa de plantilla, eliminando la necesidad de modificación.

El análisis inverso se usa generalmente para hipervínculos en plantillas y redireccionamientos en vistas. ()

1. Alias ​​la ruta en urls.py, name="route alias".
inserte la descripción de la imagen aquí

Abra el navegador, ingrese la URL y busque la función en el archivo de vistas asignadas correspondiente a través del archivo de configuración de URL

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path("admin/", admin.site.urls),
    path("login1/", views.login, name="login"),
    path("login/", views.index, name="login1"),
]

2. En views.py, importe inverso desde django.urls y use inverso ("alias de ruta") para el análisis inverso:
inserte la descripción de la imagen aquí

Las funciones en las vistas (view) realizarán algunas operaciones, como renderizar para cargar páginas web HTML u obtener contenido de entrada de la página web, etc.; redirect(reverse('login')) redirige a la URL de destino a través del análisis inverso, y luego regresa a la URL y ve el proceso de mapeo nuevamente

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

def login(request):
	return render(request,"runoob.html");

def index(request):
	if request.method == "GET":
		return HttpResponse("nikankan");
	else:
		username = request.POST.get("username")
		pwd = request.POST.get("pwd");
		if username=="runoob" and pwd =="runoob":
			return HttpResponse("runoob");
		else:
			return redirect(reverse("login"))

3. En el archivo HTML en las plantillas de plantilla, use {% url "route alias" %} para analizar inversamente.
inserte la descripción de la imagen aquí

{%URL '' %} Aquí, la ruta de URL normalmente se configura y el análisis inverso se realiza a través de este formato j. Cuando se hace clic en la acción, se realiza un análisis inverso a la URL correspondiente y luego se sigue la nueva lógica de plantilla de vistas de URL

inserte la descripción de la imagen aquí

El contenido del análisis inverso es en realidad "login/" en la ruta ("login/", views.index, name="login1") en este código. Originalmente, solo podría ser la página correspondiente a la url. Con el análisis inverso, la página también puede corresponder a la url.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>RUNOOB</title>
</head>
<body>
	<h3>LogIN</h3>
	<form action="{% url 'login1' %}" method="post">
		{% csrf_token %}
		<p>用户名:<input type="text" name="username"></p>
		<p>密码:<input type="text" name="pwd"></p>
		<input type="submit">
	</form>
	<p>{
   
   {rlt}}</p>
</body>
</html>

Análisis lógico:

1. Después de iniciar el servicio, abra http://127.0.0.1:8000/login1 y busque la vista views.login según la URL

2. En las vistas, puede encontrar que la función de inicio de sesión devuelve la interfaz que se carga (renderiza) fuera de runoob.html

3. En la plantilla, runoob.html carga la página HTML, completa el contenido, hace clic en enviar y luego encuentra el inicio de sesión en la URL de acuerdo con la acción solicitada para abrir http://127.0.0.1:8000/login

4. De acuerdo con la configuración de la URL, la función de índice en las vistas se encuentra en este momento y la página se muestra de acuerdo con el juicio de la función, o se redirige a la interfaz de ruta login1.

Hasta ahora, la URL tiene un alias, las vistas se redirigen a través de la redirección (reverse()) y la plantilla se analiza inversamente a través de {%URL '' %} para realizar la operación de análisis inverso de la URL.

Nota: Los ejemplos en el tutorial para principiantes son incorrectos, comprensión personal, corríjame si hay errores.

Enlace de referencia: https://www.jianshu.com/p/0b4060cf9e33
Fuente: Jianshu

Supongo que te gusta

Origin blog.csdn.net/weixin_43732022/article/details/131660466
Recomendado
Clasificación