Django Vistas - FBV y CBV

FBV(function base views)Las vistas basadas en funciones consisten en usar funciones en las vistas para manejar las solicitudes.

CBV(class base views)Las vistas basadas en clases consisten en usar clases en las vistas para manejar las solicitudes.

FBV

En realidad, las vistas basadas en funciones han sido las que hemos estado usando en los capítulos anteriores; es decir, se usan funciones para manejar las solicitudes de los usuarios. Vea el siguiente ejemplo:

Configuración de rutas:

Archivo urls.py

urlpatterns = [
    path("login/", views.login),
]

Archivo views.py

from django.shortcuts import render,HttpResponse

def login(request):
    if request.method == "GET":
        return HttpResponse("Método GET")
    if request.method == "POST":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        if user == "ejemplo" and pwd == "123456":
            return HttpResponse("Método POST")
        else:
            return HttpResponse("Método POST 1")

Si accedemos directamente a http://127.0.0.1:8000/login/ en el navegador, el resultado es:

GET 方法

CBV

Las vistas basadas en clases usan clases para manejar las solicitudes de los usuarios. Podemos utilizar diferentes métodos dentro de la clase para manejar distintas solicitudes, lo que mejora en gran medida la legibilidad del código.

La clase definida debe heredar de la clase padre View, por lo que primero es necesario importar la biblioteca:

from django.views import View

Antes de ejecutar el método correspondiente a la solicitud, se ejecuta primero el método dispatch (se ejecuta antes de los métodos get/post/put...). El método dispatch() llama al método adecuado según el tipo de solicitud para manejarla.

En realidad, por lo que hemos aprendido antes, sabemos que la URL de Django asigna una solicitud a una función invocable, no a una clase. Entonces, ¿cómo se implementan las vistas basadas en clases? Principalmente a través del método estático as_view() proporcionado por la clase padre View. El método as_view es la interfaz externa basada en la clase; devuelve una función de vista. Después de la llamada, la solicitud se pasa al método dispatch, que luego maneja diferentes métodos según el tipo de solicitud.

Configuración de rutas:

Archivo urls.py

urlpatterns = [
    path("login/", views.Login.as_view()),
]

Archivo views.py

from django.shortcuts import render,HttpResponse
from django.views import View

class Login(View):
    def get(self,request):
        return HttpResponse("Método GET")

    def post(self,request):
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        if user == "ejemplo" and pwd == "123456":
            return HttpResponse("Método POST")
        else:
            return HttpResponse("Método POST 1")

Si accedemos directamente a http://127.0.0.1:8000/login/ en el navegador, el resultado es:

GET 方法
Otras extensiones