首页 > 技术文章 > python_django_类视图的第一次忐忑碰触!!!

Vera-y 2019-12-19 16:34 原文

  我们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等请求方法名!!

 

好的,以上就是我今天摸了一下类视图函数的感觉,手感不错哦!!

推荐阅读