首页 > 其他 > 详细

django的CBV设计模式

时间:2019-03-04 22:11:17      阅读:165      评论:0      收藏:0      [点我收藏+]

一、什么的是CBV

cbv是class base view的缩写,是django中基于类来设计视图函数的,我们一开始接触的这种形式----path(‘login‘,views.login),叫fbv,是基于方法来设计视图函数的。

二、语法

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

urlpatterns = [
    path(admin/, admin.site.urls),
    path(login,views.login1),                          #fbv
    path(login/,views.LoginClass.as_view())   #cbv
]
技术分享图片
from django.shortcuts import render,HttpResponse
from django.views import View
# Create your views here.

def login1(request):
    return


class LoginClass(View):

    def get(self,request):

        return render(request,login.html)
    def post(self,request):
        print(request.POST.get(user))
        print(request.POST.get(pwd))
        return HttpResponse(ok...)
views

三、as_view()源码分析

看cbv中,as_view()做了什么事情

技术分享图片
 1 #as_view()源码执行流程
 2 #@classonlymethod
 3 def as_view(cls, **initkwargs):
 4 
 5     def view(request, *args, **kwargs):
 6         self = cls(**initkwargs)
 7         if hasattr(self, get) and not hasattr(self, head):
 8             self.head = self.get
 9         self.request = request
10         self.args = args
11         self.kwargs = kwargs
12         return self.dispatch(request, *args, **kwargs)
13     return view
14 #第一步:LoginClass.as_view(),执行as_view()方法,返回view方法名,
15 #第二步:相当于path(‘login/‘,view),当有请求时,执行view方法
16 #第三步:self = cls(**initkwargs),cls是类名--LoginClass,所以self是一个LoginClass实例对象
17 #第四步:return self.dispatch(request, *args, **kwargs)  执行dispatch方法
18 #第五步:self没有dispatch方法,去父类View中找,能找到dispatch
19 #第六步:如果请求方式--request.method.lower()在self.http_method_names列表中,利用反射在self实例对象中找到这个方法 赋值给handler
20 #第七步:执行handler ,将执行结果返回给调用者
21 def dispatch(self, request, *args, **kwargs):
22 
23     if request.method.lower() in self.http_method_names:
24         handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
25     else:
26         handler = self.http_method_not_allowed
27     return handler(request, *args, **kwargs)
源码分析

 

django的CBV设计模式

原文:https://www.cnblogs.com/zhang-yl/p/10473292.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!