FBV和CBV源码分析
- FBV直接调用user方法执行业务代码
- 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对应方法