rest-framework框架

rest-framework框架是Django里面非常重要的框架,但提到rest-framework框架就不得不说两种请求方式,那就是CBV和FBV。

 

FBV(function base views) 就是在视图里使用函数处理请求。

在之前django的学习中,我们一直使用的是这种方式,所以不再赘述。

 

CBV(class base views) 就是在视图里使用类处理请求。

Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承、封装、多态)。所以Django在后来加入了Class-Based-View。可以让我们用类写View。这样做的优点主要下面两种:

  1. 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
  2. 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性

 

想要了解rest-framework框架的组织结构就必须先知道CBV处理请求的流程

CBV请求流程:

然后创建对应的views 和html

然后去找as_view这个绑定到类的方法,自己这里没有就去父类View找 

在as_view里面最后返回的是dispacth,然后dispatch返回的是这个函数执行的结果

 

# 用户一旦访问get请求login-----》

    view(request):
        return self.dispatch(request, *args, **kwargs)
    
                dispatch(self, request, *args, **kwargs):

                    if request.method.lower() in self.http_method_names:
                        handler = getattr(self, request.method.lower())
                    
                    return handler(request, *args,**kwargs)

 


RESTful:(面向资源架构(ROA:Resource Oriented Architecture))

  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
  • REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态
  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
  • 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性
  • 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

一切即资源

之前我说的根据不同的请求定义不同的功能,而不在url地址里面增添动词。

books            books
   book/add/        addbook
   book/1/change    changebook
   book/1/delete    changebook
   
   restful:     
                  get       查看
         books  ------------>
                  post      添加
                      
                  get        查看
         book/1/-------------              
                  delete     删除
                  put        更新

 

GET :从服务器取出资源(一项或多项)
POST :在服务器新建一个资源
PUT :在服务器更新资源(客户端提供改变后的完整资源)
PATCH :在服务器更新资源(客户端提供改变的属性)
DELETE :从服务器删除资源

 

restframework框架:

 

PIView    (******class PublishView(APIView):

        def get(self,request):
            publish_list=Publish.objects.all()
            ret=serialize("json",publish_list)

            return HttpResponse(ret)

        def post(self,request):
            pass
     #url(r'^publishes/', views.PublishView.as_view()),
     #url(r'^publishes/', APIView.as_view()),
     #url(r'^publishes/', APIView.as_view()),
     #url(r'^publishes/', View.view),
     
     用户一旦访问get请求
     
     View.view(request):
          return self.dispatch(request, *args, **kwargs)
                ---- APIView.dispatch(request, *args, **kwargs):
                            if request.method.lower() in self.http_method_names:
                                handler = getattr(self, request.method.lower())

                            response = handler(request, *args, **kwargs)
                        return response
         

 

 

 

rest-framework框架和CBV的区别在于 ,多了一个APIView,最终还是跑到了View里面。但需要注意的是dispatch一定是先从自己这里找,没有再从父类找。

 

 这就是rest-framework框架的APIView,以下是整个框架的组成部分。

(1)APIView 
(2) 序列化组件 (******)
(3) 视图组件 (******)
(4) 解析器
(5) 认证组件
(6) 权限组件
(7) 频率组件
(8) 分页器
(9) 响应器
(10) url控制器
(11) 版本控制

 

posted @ 2018-07-31 16:19  泛夜泰克  阅读(302)  评论(0编辑  收藏  举报