一:自定义配置settings文件

  1、有两套配置文件,默认配置,用户的配置
  2、如果某个字段,用户配置了,就用用户的,如果没配置,就用默认的

二:分页器

  1、三种分页:

# 普通分页
from rest_framework.pagination import PageNumberPagination
# 偏移分页
from rest_framework.pagination import LimitOffsetPagination
# 加密分页
from rest_framework.pagination import CursorPagination
class MyPageNumberPagination(PageNumberPagination):
# 每页显示多少条
page_size = 3
# 查询的key,问号后面的key
page_query_param = 'aa'
# 指定当前页显示多少条
page_size_query_param='size'
# 每页最多显示多少条
max_page_size=4

分页器中一些简单的查询用法

    (1)第一种:类似于原来django中的普通分页

# 每页显示多少条
page_size = api_settings.PAGE_SIZE
# 查询的key,问号后面的key
page_query_param = 'page'
# 指定当前页显示多少条
page_size_query_param
# 每页最多显示多少条
max_page_size
class Book(ViewSetMixin, APIView):
def get_all(self, request):
response = {'status': 100, 'msg': '查询成功'}
book_list = models.Book.objects.all()
# 实例化产生一个分页对象
# 不继承来修改对象的值
page=PageNumberPagination()
page.page_size=2
page.page_query_param='bb'
# page = MyPageNumberPagination()
# 第一个参数:要分页的数据,第二个参数request对象,第三个参数,当前视图对象
page_list = page.paginate_queryset(book_list, request, self)
# 再序列化的时候,用分页之后的数据
ser = mySer.BookSerializer(instance=page_list, many=True)
# response['data'] = ser.data
# return Response(response)
# 会带着链接,和总共的条数(不建议用)
return page.get_paginated_response(ser.data)
# return Response(ser.data)

普通分页

   (2)第二种:偏移分页

#每页显示的条数
default_limit = api_settings.PAGE_SIZE
#标杆值
offset_query_param = 'offset'
#往后偏移多少
limit_query_param = 'limit'
#每页显示最大的条数
max_limit = None ****要取的条数,如果超过了,还剩多少,就显示多少****
from rest_framework.pagination import LimitOffsetPagination
class Book(ViewSetMixin, APIView):
def get_all(self, request):
response = {'status': 100, 'msg': '查询成功'}
book_list = models.Book.objects.all()
# 实例化产生一个偏移分页对象
page=LimitOffsetPagination()
page.default_limit=3
page.max_limit=5 page_list = page.paginate_queryset(book_list, request, self)
ser = mySer.BookSerializer(instance=page_list, many=True)
return Response(ser.data)

偏移分页

    (3)第三种:加密分页(查询速度快)

#按nid排序  
page.ordering = 'nid'
#查询的key值
cursor_query_param = 'cursor'
#每页显示多少条
page_size = api_settings.PAGE_SIZE
from rest_framework.pagination import CursorPagination
class Book(ViewSetMixin, APIView):
def get_all(self, request):
response = {'status': 100, 'msg': '查询成功'}
book_list = models.Book.objects.all()
# 实例化产生一个加密分页对象
page = CursorPagination()
page.ordering = 'nid' page_list = page.paginate_queryset(book_list, request, self)
ser = mySer.BookSerializer(instance=page_list, many=True)
return page.get_paginated_response(ser.data)

加密分页

  2、使用:

    (1)生成一个对象(普通,偏移,加密)
    (2)***重点:可以修改对象的属性

# ret=对象. 第一个参数:要分页的数据,第二个参数request对象,第三个参数,当前视图对象
paginate_queryset(book_list, request, self)

    (3)丢到序列化类中,完成序列化,

    (4)最后返回

三:版本控制

   1、掌握的:URLPathVersioning

from rest_framework.versioning import URLPathVersioning,
# 了解
# QueryParameterVersioning,
# AcceptHeaderVersioning

  2、在setting中配置:

REST_FRAMEWORK = {
# 每页显示两条
'PAGE_SIZE':2,
# 'DEFAULT_VERSIONING_CLASS':'',
'VERSION_PARAM':'version',
'DEFAULT_VERSION':'v1',
'ALLOWED_VERSIONS': ['v1', 'v2'],
}  

  

  3、局部使用:
    versioning_class = URLPathVersioning

  4、全局使用:

'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',

  5、settings路由配置:

url(r'^(?P<version>[v1|v2|v3]+)/books/$', views.Book.as_view({'get':'get_all'}),name='ttt'),
url(r'^books/(?P<pk>\d+)', views.Book.as_view({'get':'get_one'})),

  6、在视图类中的request对象中,就可以取出版本号

  7、反向解析:

url2=request.versioning_scheme.reverse('ttt',request=request)
class Book(ViewSetMixin, APIView):
versioning_class = URLPathVersioning def get_all(self, request,*args,**kwargs): print(request.version)
# 路由反向解析
# from django.urls import reverse
# url2=reverse(viewname='ttt',kwargs={'version':request.version})
# print(url2)
# 提供给咱的解析
url2=request.versioning_scheme.reverse('ttt',request=request)
print(url2)
response = {'status': 100, 'msg': '查询成功'}
book_list = models.Book.objects.all()
# 实例化产生一个加密分页对象
page = CursorPagination()
page.ordering = 'nid' page_list = page.paginate_queryset(book_list, request, self)
ser = mySer.BookSerializer(instance=page_list, many=True)
return page.get_paginated_response(ser.data)

相关代码

from rest_framework.versioning import URLPathVersioning, QueryParameterVersioning, AcceptHeaderVersio

Django day30 自定义配置settings文件,分页器,版本控制的更多相关文章

  1. Django学习-2-初识settings文件

    配置文件文档 https://docs.djangoproject.com/en/2.0/ref/    1.添加APP的设置 INSTALLED_APPS = [ 'django.contrib.a ...

  2. django settings实现原理及自定义项目settings配置

    基于django 中的settings实现原理,实现自己项目配置文件的可插拔式设计 ##首先说一下django中settings.py中的实现原理 ''' 应该明确一点,django暴露给用户一个自定 ...

  3. Python django 404页面配置和debug=false 静态文件配置 django版本1.10.5

    django设置404页面 1.设置settings文件 DEBUG = False ALLOWED_HOSTS = ['127.0.0.1', 'localhost']或者 ALLOWED_HOST ...

  4. Django的settings文件部分源码分析

    Django的settings文件部分源码分析 在编写Django项目的过程中, 其中一个非常强大的功能就是我们可以在settings文件配置许多选项来完成我们预期的功能, 并且这些配置还必须大写, ...

  5. (day53)五、模型层(ORM)、settings文件配置

    目录 一.settings配置 (一)测试文件配置 (二)查看对应sql语句 二.模型表数据的增删改查 (一)创建数据 (1)create方法 (2)利用对象的绑定方法 (二)修改数据 (1)利用qu ...

  6. django之三剑客、静态文件配置、请求响应对象、数据库操作

    三剑客 from django.shortcuts import render,HttpResponse,redirect HttpResponse # 返回字符串 render(response, ...

  7. Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

    Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05- ...

  8. django模版中配置和使用静态文件方法

    1 在项目根路径下创建静态文件目录static: test3 是我的项目名,根目录下面: booktest 是一个应用 static是我建立的静态文件目录(这个名字其实可以叫其他的),静态文件都放在这 ...

  9. Django之用户上传文件的参数配置

    Django之用户上传文件的参数配置 models.py文件 class Xxoo(models.Model): title = models.CharField(max_length=128) # ...

随机推荐

  1. Python学习——字典

    字典 字典是另一种可变容器模型,且可存储任意类型对象. 1.创建字典 字典由键和对应值成对组成.每个键与值之间用:隔开,每对之间逗号隔开. 每个键应当互不相同,值可以相同.若同时出现两个相同的键,则后 ...

  2. WordCountPro,完结撒花

    WordCountPro,完结撒花 软测第四周作业 一.概述 该项目github地址如下: https://github.com/YuQiao0303/WordCountPro 该项目需求如下: ht ...

  3. zoj 3812 状压dp

    转载:http://blog.csdn.net/qian99/article/details/39138329 题意:给出n个物品,每个物品有两种属性Wi,Ti,有q组查询,每组查询要求在n个物品中选 ...

  4. java连接数据库(经常用)

    一.配置环境 1.首先下载sqlserver2008驱动文件,找到sqljdbc4.jar文件,将这个文件拷到C:\Program Files\Java\jdk1.8.0_121\jre\lib\ex ...

  5. PatentTips - Hamming distance comparison

    BACKGROUND INFORMATION In a typical data processing environment, data may be transmitted in multiple ...

  6. Ubuntu 16.04在启动和关机时不显示启动和关机画面且显示详细的命令信息,没有进度条和Logo,或者只有紫色界面,或者没有开机画面等问题解决

    主要有以下解决方法: 1.如果之前配置过Grub来显示详细的命令信息的,那么改回去就行了,参考:http://www.cnblogs.com/EasonJim/p/7129873.html,通过这种方 ...

  7. ubuntu 16.04网卡找不到eth0

    自15版本开始就不叫eth0.可以通过ifconfig进行查看: ifconfig -a 其中enp3s0才是网卡的名称,lo为环路. 参考: http://blog.csdn.net/christn ...

  8. 两张图让git新手在项目中运用git命令行

    创建分支命令:    git branch (branchname) 切换分支命令:      git checkout (branchname) 当你切换分支的时候,Git 会用该分支的最后提交的快 ...

  9. 基本的文件I/O

    基本的文件 I/O 抽象基类 Stream 支持读取和写入字节. Stream 集成了异步支持. 其默认实现根据其相应的异步方法来定义同步读取和写入,反之亦然. 所有表示流的类都是从 Stream 类 ...

  10. C++对象模型——&quot;无继承&quot;情况下的对象构造(第五章)

    5.1 "无继承"情况下的对象构造 考虑以下这个程序片段: 1 Point global; 2 3 Point foobar() 4 { 5 Point local; 6 Poin ...