rest-framework框架
rest-framework框架是Django里面非常重要的框架,但提到rest-framework框架就不得不说两种请求方式,那就是CBV和FBV。
FBV(function base views) 就是在视图里使用函数处理请求。
在之前django的学习中,我们一直使用的是这种方式,所以不再赘述。
CBV(class base views) 就是在视图里使用类处理请求。
Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承、封装、多态)。所以Django在后来加入了Class-Based-View。可以让我们用类写View。这样做的优点主要下面两种:
- 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
- 可以用不同的函数针对不同的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) 版本控制