栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

7 cbv的View源码分析

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

7 cbv的View源码分析

这里要明白django和REST framework的区别在哪里 1.djngo和rest_framework风格区别:
django风格:FBV
rest_framework风格:CBV
CBV和FBV区别:https://www.cnblogs.com/yuanchenqi/articles/8715364.html
2.rest_framework的Views:

通过rest_framework的简单使用可以看出在Views.py中继承ModelViewSet
但是ModelViewSet–>继承(GenericViewSet)–>继承(GenericViewSet)–>继承(GenericAPIView)–>继承(views.APIView)–>继承 (View)又回到django中原生的View

3.django原生view写CBV:

Views.py中

路由中

看到BOOks调用了as_view()方法:

path(‘books1/’, views.Books.as_view()),
#在这个地方应该写个函数内存地址,views.Books.as_view()执行完,是个函数内存地址,as_view是一个类方法,类直接来调用,会把类自动传入

as_view()源码:
as_view()是View类的中的一个类方法

classonlymethod继承了classmethod 也就是说是一样的 类方法

as_view的原理:

cls这个词语等于path(‘books1/’, views.Books.as_view()),所以cls是Books本身
**initkwargs 等于参数,如果不传入参数,将不作为

4.as_view中的view方法:

1.self.request = request`,这个就是books中的request
2.返回了 return self.dispatch(request, *args, **kwargs)

5.dispatch方法:

 # 假如request的请求方法小写 在  self.http_method_names: 中
 if request.method.lower() in self.http_method_names:
            # handler 等于 handler=getattr(self,'get'),你写的Book类的get方法的内存地址
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        # #执行get(request)
        return handler(request, *args, **kwargs)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/329362.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号