1. 什么是restful规范

    是一套规则,用于程序之间进行数据交换的约定。
    他规定了一些协议,对我们感受最直接的的是,以前写增删改查需要写4个接口,restful规范的就是1
    个接口,根据method的不同做不同的操作,比如:get/post/delete/put/patch/delete.
    初次之外,resetful规范还规定了:
    - 数据传输通过json
    扩展:前后端分离、app开发、程序之间(与编程语言无关)
    JSON:
    {
    name:'alex',
    age:18,
    gender:'男'
    }
    以前用webservice,数据传输格式xml。
    XML
    <name>alex</name>
    <age>alex</age>
    <gender>男</gender>
  2. 什么是drf?

    drf是一个基于django开发的组件,本质是一个django的app。
    drf可以办我们快速开发出一个遵循restful规范的程序。
  3. drf如何帮助我们快速开发的?drf提供了那些功能?

    - 视图,APIView用处还不知道。
    - 解析器,根据用户请求体格式不同进行数据解析,解析之后放在request.data中。
    在进行解析时候,drf会读取http请求头 content-type.
    如果content-type:x-www-urlencoded,那么drf会根据 & 符号分割的形式去处理请求体。
    user=wang&age=19 如果content-type:application/json,那么drf会根据 json 形式去处理请求体。
    {"user":"wang","age":19}
    - 序列化,可以对QuerySet进行序列化,也可以对用户提交的数据进行校验。
    - 渲染器,可以帮我们把json数据渲染到页面上进行友好的展示。(内部会根据请求设备不同做不同的
    展示)
  4. 序列化:many=True or False

  5. 序列化:展示特殊的数据(choices、FK、M2M)可使用

    depth
    source,无需加括号,在源码内部会去判断是否可执行,如果可执行自动加括号。[fk/choice]
    SerializerMethodField,定义钩子方法。[m2m]
  6. 写程序的潜规则:约束

    # 约束子类中必须实现f1
    class Base(object):
    def f1(self):
    raise NotImplementedError('asdfasdfasdfasdf')
    class Foo(Base):
    def f1(self):
    print(123)
    obj = Foo()
    obj.f1()
  7. 面向对象的继承

    class Base(object):
    def f1(self):
    print('base.f1')
    self.f2()
    def f2(self):
    print('base.f2') class Foo(Base):
    def f2(self):
    print('foo.f2') obj = Foo()
    obj.f1()
    class Base(object):
    x1 = 123
    def f1(self):
    print(self.x1)
    class Foo(Base):
    x1 = 456 obj = Foo()
    obj.f1()
    class APIView(object):
    version_class = 123 def get_version(self):
    print(self.version_class) class UserView(APIView):
    version_class = 666 obj = UserView()
    obj.get_version()
    class APIView(object):
    version_class = 123
    def dispatch(self,method):
    self.initial()
    getattr(self,method)()
    def initial(self):
    print(self.version_class) class UserView(APIView):
    version_class = 666
    def get(self):
    print('userview.get') obj = UserView()
    obj.dispatch('get')
    class URLPathVersion(object): def determin_version(self):
    return 'v1' class APIView(object):
    version_class = None
    def dispatch(self,method):
    version = self.initial()
    print(version)
    getattr(self,method)() def initial(self):
    self.process_version() def process_version():
    obj = self.version_class()
    return obj.determine_version() class UserView(APIView):
    version_class = URLPathVersion

分页

  1. 分页

    1.1 PageNumberPagination

    • 配置 settings.py

      REST_FRAMEWORK = {
      "PAGE_SIZE":2
      }
    • 在视图的列表页面

      from rest_framework.pagination import PageNumberPagination
      from rest_framework import serializers class PageArticleSerializer(serializers.ModelSerializer):
      class Meta:
      model = models.Article
      fields = "__all__" class PageArticleView(APIView): def get(self,request,*args,**kwargs):
      queryset = models.Article.objects.all()
      # 方式一:仅数据
      """
      # 分页对象
      page_object = PageNumberPagination()
      # 调用 分页对象.paginate_queryset方法进行分页,得到的结果是分页之后的数据
      # result就是分完页的一部分数据
      result = page_object.paginate_queryset(queryset,request,self)
      # 序列化分页之后的数据
      ser = PageArticleSerializer(instance=result,many=True)
      return Response(ser.data)
      """
      # 方式二:数据 + 分页信息
      """
      page_object = PageNumberPagination()
      result = page_object.paginate_queryset(queryset, request, self)
      ser = PageArticleSerializer(instance=result, many=True)
      return page_object.get_paginated_response(ser.data)
      """
      # 方式三:数据 + 部分分页信息
      page_object = PageNumberPagination()
      result = page_object.paginate_queryset(queryset, request, self)
      ser = PageArticleSerializer(instance=result, many=True)
      return Response({'count':page_object.page.paginator.count,'result':ser.data})
    • LimitOffsetPagination

      from rest_framework.pagination import PageNumberPagination
      from rest_framework.pagination import LimitOffsetPagination
      from rest_framework import serializers class PageArticleSerializer(serializers.ModelSerializer):
      class Meta:
      model = models.Article
      fields = "__all__"
      class HulaLimitOffsetPagination(LimitOffsetPagination):
      max_limit = 2 class PageArticleView(APIView):
      def get(self,request,*args,**kwargs):
      queryset = models.Article.objects.all()
      page_object = HulaLimitOffsetPagination()
      result = page_object.paginate_queryset(queryset, request, self)
      ser = PageArticleSerializer(instance=result, many=True)
      return Response(ser.data)
    • 扩展

      url(r'^page/view/article/$', views.PageViewArticleView.as_view()),
      from rest_framework.generics import ListAPIView
      class PageViewArticleSerializer(serializers.ModelSerializer):
      class Meta:
      model = models.Article
      fields = "__all__"
      class PageViewArticleView(ListAPIView):
      queryset = models.Article.objects.all()
      serializer_class = PageViewArticleSerializer
      REST_FRAMEWORK = {
      "PAGE_SIZE":2,
      "DEFAULT_PAGINATION_CLASS":"rest_framework.pagination.PageNumberPagination"
      }

drf分页功能的更多相关文章

  1. DRF框架中分页功能接口

    目录 DRF框架中分页功能接口 DRF框架中分页功能接口 一.在框架中提供来三个类来实现分页功能,PageNumberPagination.LimitOffsetPagination.CursorPa ...

  2. day74:drf:drf其他功能:认证/权限/限流/过滤/排序/分页/异常处理&自动生成接口文档

    目录 1.django-admin 2.认证:Authentication 3.权限:Permissions 4.限流:Throttling 5.过滤:Filtering 6.排序:OrderingF ...

  3. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  4. drf 分页,获取fk,choise,m2m等字段数据(序列化)

    1.什么是restful规范 是一套规则,用于程序之间进行数据交换的约定. 他规定了一些协议,对我们感受最直接的的是,以前写增删改查需要写4个接口,restful规范的就是1个接口,根据method的 ...

  5. DjangoRestFramework框架三种分页功能的实现 - 在DjangoStarter项目模板中封装

    前言 继续Django后端开发系列文章.刚好遇到一个分页的需求,就记录一下. Django作为一个"全家桶"型的框架,本身啥都有,分页组件也是有的,但默认的分页组件没有对API开发 ...

  6. 简单封装分页功能pageView.js

    分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复 ...

  7. php对文本文件进行分页功能简单实现

    php对文本文件进行分页功能简单实现 <!DOCTYPE> <html> <head> <meta http-equiv="Content-type ...

  8. Asp.net MVC3表格共用分页功能

    在建立的mvc3项目中,在Razor(CSHTML)视图引擎下,数据会在表格中自动的生成,但分页没有好的控件实现,这里我们开发了设计了一个分页的模板,适合于没有数据提交和有数据提交的分页的分页. 第一 ...

  9. WinForm DataGridView分页功能

    WinForm 里面的DataGridView不像WebForm里面的GridView那样有自带的分页功能,需要自己写代码来实现分页,效果如下图: 分页控件  .CS: 1 using System; ...

随机推荐

  1. hosts原理及作用

    https://blog.csdn.net/qq_41356488/article/details/82190372 手机也可以修改hosts,但是需要root权限,百度

  2. Eclipse 配置Android 开发环境

    1.eclipse安装ADT插件. 地址:http://dl-ssl.google.com/android/eclipse/ 2.安装成功后,提示重启.重新启动后弹出android sdk 的路径选择 ...

  3. python开发时小问题之端口占用

    昨天开发时遇到个小问题: 在使用pycharm编写tornado代码时: 直接用这种方式开启了服务,当我想修改代码时发现端口已经被占用代码提交不上去 所以现在该关闭进程: 步骤一: 打开CMD 步骤二 ...

  4. vue-cli 项目结构介绍

    感谢:https://www.jianshu.com/p/7006a663fb9f 总体框架 一个vue-cli的项目结构如下,其中src文件夹是需要掌握的,所以本文也重点讲解其中的文件,至于其他相关 ...

  5. estt

    1.路由控制的定义 1.1.IP地址与路由控制 互联网是由路由器连接的网络组合而成的.为了能让数据包正确地到达目标主机,路由器必须在途中进行正确地转发.这种向"正确的方法"转发数据 ...

  6. Java JDBC调用inout类型参数的存储过程

    存储过程参数类型:in.out.inout,in:输入类型,out:输出类型,inout:既可输入,也可以输出. 一.JDBC调用inout类型参数的存储过程,并且获得返回值 Class.forNam ...

  7. Spring学习笔记(七)模拟实际开发过程的调用过程XML版-Setter方式注入

    模拟实际开发过程的调用过程XML版-Setter方式注入 源码获取github [TOC] 1.项目结构 2.jar包跟上个一样 3.重写set方法 UserServiceImpl.java 1234 ...

  8. O2O疯狂烧钱路:止血还是放血好

    在国内,无论是互联网巨头还是创业者,很多都将O2O领域当做下一个金矿.而对于很多O2O项目来说,市场规模.用户基数.发展潜力等传统指数依然被当做硬性指标.而为了抢夺用户,很多O2O项目都只能疯狂烧钱, ...

  9. Vue1.0用法详解

    Vue.js 不支持 IE8 及其以下版本,因为 Vue.js 使用了 IE8 不能实现的 ECMAScript 5 特性. 开发环境部署 可参考使用 vue+webpack. 基本用法 1 2 3 ...

  10. linux Init分析(原创)

    1.uboot的目标就是启动内核kernel: 2.kernel的目的就是启动应用程序,而第一个应用程序即是Init,构建根文件系统. 从uboot初始化配置后,引导内核的启动,启动函数为:start ...