Django day30 自定义配置settings文件,分页器,版本控制
一:自定义配置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文件,分页器,版本控制的更多相关文章
- Django学习-2-初识settings文件
		
配置文件文档 https://docs.djangoproject.com/en/2.0/ref/ 1.添加APP的设置 INSTALLED_APPS = [ 'django.contrib.a ...
 - django  settings实现原理及自定义项目settings配置
		
基于django 中的settings实现原理,实现自己项目配置文件的可插拔式设计 ##首先说一下django中settings.py中的实现原理 ''' 应该明确一点,django暴露给用户一个自定 ...
 - Python django 404页面配置和debug=false 静态文件配置 django版本1.10.5
		
django设置404页面 1.设置settings文件 DEBUG = False ALLOWED_HOSTS = ['127.0.0.1', 'localhost']或者 ALLOWED_HOST ...
 - Django的settings文件部分源码分析
		
Django的settings文件部分源码分析 在编写Django项目的过程中, 其中一个非常强大的功能就是我们可以在settings文件配置许多选项来完成我们预期的功能, 并且这些配置还必须大写, ...
 - (day53)五、模型层(ORM)、settings文件配置
		
目录 一.settings配置 (一)测试文件配置 (二)查看对应sql语句 二.模型表数据的增删改查 (一)创建数据 (1)create方法 (2)利用对象的绑定方法 (二)修改数据 (1)利用qu ...
 - django之三剑客、静态文件配置、请求响应对象、数据库操作
		
三剑客 from django.shortcuts import render,HttpResponse,redirect HttpResponse # 返回字符串 render(response, ...
 - Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)
		
Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05- ...
 - django模版中配置和使用静态文件方法
		
1 在项目根路径下创建静态文件目录static: test3 是我的项目名,根目录下面: booktest 是一个应用 static是我建立的静态文件目录(这个名字其实可以叫其他的),静态文件都放在这 ...
 - Django之用户上传文件的参数配置
		
Django之用户上传文件的参数配置 models.py文件 class Xxoo(models.Model): title = models.CharField(max_length=128) # ...
 
随机推荐
- SQL Server 机考,用T-SQL编写 简单实例
			
使用T-SQL实现以下要求: 要求如下: 1,添加数据库:MySchool 2,添加学生基础表:Student 3,添加学生成绩表:ScoreInfo 4,两张表结构分别如下 Student表结构:( ...
 - 清北学堂模拟赛d1t2 火柴棒 (stick)
			
题目描述众所周知的是,火柴棒可以拼成各种各样的数字.具体可以看下图: 通过2根火柴棒可以拼出数字“1”,通过5根火柴棒可以拼出数字“2”,以此类推. 现在LYK拥有k根火柴棒,它想将这k根火柴棒恰好用 ...
 - CF671C. Ultimate Weirdness of an Array
			
n<=200000个<=200000的数问所有的f(i,j)的和,表示去掉区间i到j后的剩余的数字中任选两个数的最大gcd. 数论日常不会.. 先试着计算一个数组:Hi表示f(l,r)&l ...
 - 【Java基础】Java基本数据类型与位运算
			
1.赋值运算符 赋值使用操作符“=”.它的意思是“取右边的值(即右值),把它复制给左边(即左值)”.右值可以是任何 常数.变量或者表达式 (只要它能 生成 一个值就行).但左值必须是一个明确的,已命名 ...
 - android Fragment用法
			
Fragment常用的三个类:android.app.Fragment 主要用于定义Fragmentandroid.app.FragmentManager 主要用于在Activity中操作Fragme ...
 - Oracle创建表空间、用户名、密码步骤教程
			
第一步,以最高级别 SYSDBA 身份登录数据库 cmd 进入命令行 登录方式一: C:\Documents and Settings\Administrator>sqlplus sys/sys ...
 - MAPZONE GIS SDK接入Openlayers3之三——瓦片数据集接入
			
瓦片数据集接入实现思路: 1.构造ol.source.TileImage数据源,构造该数据源需要以下几项: 1)空间参考,通过如下代码构造 2)TileGrid,构造需要以下几项: a)原点 b)分辨 ...
 - [Vue @Component] Pass Props Between Components with Vue Slot Scope & renderless component
			
Components with slots can expose their data by passing it into the slot and exposing the data using ...
 - 微信前端js sdk以外的开发
			
此时页面中就会出现刚才我画红圈部分的工具条. 这个工具条再加上上面的标题栏工具条. 极大的降低了可视区域的面积. 是否能将它去掉呢?答案是能够的.增加以下代码就能够去掉微信中以下的工具条: docum ...
 - <感悟帖>互联网与电子传统行业之经历
			
依据鄙人浅显的实习.毕业工作经验以及个人思考得此文. 鄙人有幸在BAT中的B实习,以及某电子行业科研机构工作,略有心得.总结例如以下.也算是对自己的一个交待和反省. 鄙人小硕毕业211学校非985,C ...