restframeword之APIview

一, CBV(class based view) 与  FBV(function based view)

class LoginView(View):

 

    def get(self,request):

 

        return render(request,"login.html")

 

    def post(self,request):

        user=request.POST.get("user")

        pwd=request.POST.get("pwd")

 

        if 1:

            return HttpResponse("OK")

 

url(r'^index/', views.index)  # 用户一旦访问:index(request) 函数变量

 

# url(r'^login/', views.LoginView.as_view()),# 用户一旦访问login进入视图执行class方法

# url(r'^login/', View.as_view()), # 调用View 里面的as_view方法,

# url(r'^login/', View.view),          #  view里面的view方法

 

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

 

    view(request):

    return self.dispatch(request, *args, **kwargs)  #self.dispatch 看执行结果是什么就返回什么,self:谁调用就是谁的实例对象,

 

        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)             # 如果都没有就返回这个

     

 

 

例:

    # def dispatch(self, request, *args, **kwargs):  # dispatch自己有就以自己的没有找父类

    #     print("dispatch")

    #     ret=super().dispatch(request, *args, **kwargs) # 如果是get请求不返回就调用父类,不出页面,但是get是执行的

    #     return ret

果 

 

 

RESTful:(面向资源架构(ROA:Resource Oriented Architecture))# 是一种规范

REST与技术无关,代表的是一种软件架构风格,RESTRepresentational State Transfer的简称,中文翻译为表征状态转移(一种规范)

1   一切皆资源  url里面不能有动词:

   books            books

   book/add/        addbook

   book/1/change    changebook

   book/1/delete    changebook

   

   restful:     

                  get       查看

         books  ------------>

                  post      添加

      

              get        查看

 book/1/-------------                          

                  delete     删除

  put        更新

  

2

GET     :从服务器取出资源(一项或多项)

POST    :在服务器新建一个资源

PUT     :在服务器更新资源(客户端提供改变后的完整资源)

PATCH   :在服务器更新资源(客户端提供改变的属性)

DELETE  :从服务器删除资源

序列化

没有restframework我们一样可以序列化,只是restframework更简单

例1

from app01.models import Course

class CourseView(View):

 

    def get(self,request):

 

        ret=Course.objects.all()

        import json

        # temp=[]

        # for i in ret:

        #     temp.append({

        #         "title":i.title

        #     })

       #   return HttpResponse (json.dumps(temp.emsure_ascil=False))可以显示出来对象

 

例2

        # from django.core.serializers import serialize序列化

        # ret=serialize("json",ret)

        return HttpResponse(ret)

 

二,restframework框架:

帮助我们快速的开发符合restful规范的接口

 

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple djangorestframework   下载

 

 

(1)  APIView    (******)

 class PublishView(APIView):  # 继承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请求

     APIView 里面继承view,有view功能之外又添加自己的新功能,和上面view不一样

 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

 

 

 

流程:

 

 

(2)  序列化组件 ******)

(3)  视图组件   (******)

(4)  解析器     

(5)  认证组件

(6)  权限组件

(7)  频率组件

(8)  分页器

(9)  响应器

(10) url控制器

(11) 版本控制

原文地址:https://www.cnblogs.com/maojiang/p/9396421.html