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

  • 相关阅读:
    【转载】mysqldump的single-transaction和master-data
    MySQL 从库日志比主库多
    Error_code: 2003
    通过替换frm文件方式修改表结构
    ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
    批量kill mysql processlist进程
    libnuma.so.1()(64bit) is needed by mysql-community-server-5.7.9-1.el6.x86_64
    MySQL 5.7.9的多源复制
    Java-Clone 对象拷贝
    Windows 运行库
  • 原文地址:https://www.cnblogs.com/maojiang/p/9396421.html
Copyright © 2011-2022 走看看