zoukankan      html  css  js  c++  java
  • 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) 版本控制

  • 相关阅读:
    如何将自己的做的Silverlight项目发布到博客园中
    JS对当前时间的操作
    rt—移植笔记1
    rt—移植笔记2(Lwip)
    RabbitMQ一:Windows安装RabbitMQ Server
    Redis实现分布式锁
    ssh前后台交互, list传输到前后展示,table传输到台数据!!!。ssh对象传输
    Delphi中API编程编译实现
    struts2简单遍历Map
    phonegap file操作
  • 原文地址:https://www.cnblogs.com/taostaryu/p/9396538.html
Copyright © 2011-2022 走看看