resfult规范,drf安装

  一.CBV源码分析

    cbv和fbv

    1.在views中写一个类,继承View,里面写get方法,post方法

    2.在路由中配置:url(r'^test/',views.Test.as_view()),实际上第二个参数位置,放的还是一个函数内存地址

    3.当请求来了,就会执行第二个参数(request,参数),实质上执行view()

    4.view内部调用了dispatch()方法

    5.dispatch分发方法,根据请求方式不同,执行的方法不同

  二.resful规范

    -面向资源架构,面向资源编程

    -10个规范

      -与后台做交互,通常使用https

      -域名:

        -https://api.baidu.com(存在跨域问题)

        -https://www.baidu.com/api/

      -版本

        -https://www.baidu.com/api/v1

        -https://www.baidu.com/api/v2

      -路径,网络上任何东西都是资源,均使用名词表示(可复数)

        -https://api.example.com/v1/books

        不是:https://api.example.com/v1/delete_one_book

      -method来表示增删查改

        -https://api.example.com/v1/books get请求,获取所有书

        -https://api.example.com/v1/books post请求,新增一本书

        -https://api.example.com/v1/book/1 delete请求,删除一本书

        -https://api.example.com/v1/book/1 get请求,获取id为1的这本书

        -https://api.example.com/b1/book/1 put/patch请求,修改id为1的这本书

      -过滤,通过在url上传参的形式传递搜索条件

        -https://api.example.com/v1/books?limit=10: 只拿前10本

        -https://api.example.com/v1/books?price=10: 只拿价格为10的书

      -状态码

        -{status:100,}

      -错误处理,应返回错误信息,error当作key

        {

          status:101,

          errors:'您没有权限操作这个事'  

        }

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

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

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

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

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

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

      -返回结果中提供链接(获取一本书)

        {

          id:1,

          name:lxx,

          price:12

          publish:www.xx.com/api/v1/publish/1

        }

      三.drf写resful的接口

        -先安装

        -pip3 install djangorestframework

        -简单使用

          class DrfTest(APIView):

            def get(self,request,*args,**kwargs):

              response={'status':100,'errors':None}

              response['users']=user_list

              # 用drf的Response,可以通过请求客户端来判断返回数据格式是什么样的

              return Response(response)

              # return JsonResponse(response)

      四.drf之序列化

        干什么用的?    把python中的对象,转成json格式字符串

        -1 写一个类继承

          class BookSerializer(serializers.Serializer):

            id = serializers.CharField()

            title = serializers.CharField()

            price = serializers.CharField()

        -2 使用(视图类中)

          book_ser = BookSerializer(queryset对象/单个对象,many=True/False)

          book_ser.data  序列化完成的字典

        -总结: 

          1. 变量名和source指定的值不能一样

          2. source = 'publish.name'还支持继续.

          3. source 还支持方法(没用)

          4. 支持写方法,如下

            方法一定传一个参数,是当前book对象

            publish_dic = serializer.SerializerMethodField()

              def get_publish_dic(self,obj):

                return ('id':obj.publish.pk,'name':obj.publish.name)

    -在线格式化json    

      https://www.json.cn/

posted @ 2019-02-19 20:38  小菜鸟张阳阳  阅读(399)  评论(0编辑  收藏  举报