zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    交换机技术
    第七周课后总结
    以太网原理
    test
    NetCore第一步:千里之行 始于环境构筑
    第二十课(一)
    第十九课(三)
    第十九课(二)
    第十九课(一)
    第十八课(三)
  • 原文地址:https://www.cnblogs.com/xiaocaiyang/p/10403252.html
Copyright © 2011-2022 走看看