FBV和CBV的区别(源码分析)

FBV和CBV源码分析

  1. FBV直接调用user方法执行业务代码

  1. CBV相当于在FBV上面封装了一层
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
    path('users/', views.UserView.as_view()),
]
from django.views import View

class UserView(View):
    def get(self, request, *args, **kwargs):
        return JsonResponse({"code": 1000, "data": "xxx"})

    def post(self, request, *args, **kwargs):
        return JsonResponse({"code": 1000, "data": "xxx"})

下面来做一下源码分析:

第一步: 当请求过来的时候. view.UserView会找到父类View中的as_view()方法.

第二步: 调用到view()方法, 将类赋值给self, 并调用dispatch方法:

第三步: 执行dispatch()中getattr找到类的绑定对象UserView.method -> 直接调用method对应方法

posted on 2023-04-16 21:29  huxiaofeng  阅读(73)  评论(0编辑  收藏  举报

导航