我们Django学到这里,基础知识阶段是已经完成了!!
在我们前面接触到的视图都是基于函数的视图函数我们可以称它为FBV,而今天我们新接触的就是视图函数的另一类CBV:基于类的视图函数,我们这里拓展这个知识也是为了给后面学习RESTful框架打基础,因为python的RESTful框架可能会完全推翻前面我们学习到的Django基础知识,但是MVC架构是不变的哈。
第一个CBV视图函数:
# views.py from django.http import HTTPResponse from django.views import View class HelloCBV(View): msg=None def get(self,request): # 只接收get请求 return HTTPResponse('get request') def post(self,request): # 只接收post请求 return HTTPResponse('post request') def put(self,request): # 只接收put请求 return HTTPResponse('put request')
对应的urls.py
# urls.py from django.urls import path from . import views app_name = 'my_app' urlpatterns = [ path('test/', views.test), path('books/',views.HelloCBV.as_view(), name='books') ]
从上面的views.py函数我们可能注意到了,get/post/put作为了函数方法名,这里的方法名就比较神奇了,因为他就是拿来接收我们客户端的get/post/put请求的。我也觉得超级神奇!!
为啥会这么神奇呢??
因为我们类视图继承了View这个大类,所以连带着我们urls.py中接口的地方,都变成了
views.HelloCBV.as_view()
正因为这个as_view() 所以我们才会看到上面这么神奇的事。
我们阅读as_view()的源代码发现它是View类的方法,而View方法可以直接这样干的请求还有:
http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
由此可知,我们上面这些方法也阔以这么干,嘿嘿嘿 ヾ(´∀`.ヾ)。
注意!!!
- 我们as_view()中可以传递参数,但是参数名称不能是get/post等请求方法名!!
好的,以上就是我今天摸了一下类视图函数的感觉,手感不错哦!!