rest

Django 中的FBV和CBV

FBV

  • FBV(fuction base view ) 就是在视图里使用函数处理请求

from django.http import render

def index(request):

    if request.method == 'POST':

        pass

 

    return render(request, 'index.html',locals())

CBV

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

from django.http import render

from django.views import View

class PublishView(View):

    def get(self, request):

 

        return render(request, 'index.html', locals())

 

    def post(self, request):

        pass

  • Python是一个面向对象的编程语言,仅使用函数编程,将无法使用到面向对象编程的特性(封装、继承、多态),所以推荐使用类来编写View。

  • 优点:

  • 提高代码的复用性 ,可以使用面向对象的特性,比如Mixin(多继承)

  • 可以使用不同的函数处理针对不同的http方法处理,避免使用多个if,提高代码的可读性

django处理请求的函数

  • Django的url是将一个请求分配给可调用的函数的,而不是一个class。针对这个问题,class-based view提供了一个as_view()静态方法(也就是类方法),调用这个方法,会创建一个类的实例,然后通过实例调用dispatch()方法,dispatch()方法会根据request的method的不同调用相应的方法来处理request(如get() , post()等)。到这里,这些方法和function-based view差不多了,要接收request,得到一个response返回。如果方法没有定义,会抛出HttpResponseNotAllowed异常。

  • 在url中就这么写:


from django.http import HttpResponse

from django.views import View

class MyView(View):

 

      def get(self, request):

            return HttpResponse('OK')

  • View视图:

# urls.py

from django.conf.urls import url

from myapp.views import MyView

urlpatterns = [

     url(r'^index/$', MyView.as_view()),

]

RESTful规范

什么是RESTful

  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”

  • REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态

  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”

  • 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性

  • 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

RESTful API设计

{

error: "Invalid API key"

}


 

- 返回结果,针对不同操作,服务器向用户返回的结果应符合以下规范

 

- GET /collection:返回资源对象的列表(数组)

- GET /collection/resource:返回单个资源对象

- POST /collection:返回新生成的资源对象

- PUT /collection/resource:返回完整的资源对象

- PATCH /collection/resource:返回完整的资源对象

- DELETE /collection/resource:返回一个空文档

 

- Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么

 

- ``` python
{"link": {

  "rel":   "collection https://www.example.com/zoos",

  "href":  "https://api.example.com/zoos",

  "title": "List of zoos",

  "type":  "application/vnd.yourformat+json"

}}```

 

 

## rest-framework框架
posted @ 2018-08-06 20:31  Fixdq  阅读(375)  评论(0)    收藏  举报