Restframework的版本及分页
1.版本
1.1基于url的get传参方式
1.创建django项目(起名我的是version),再创建一个app01应用
创建完成,通过python3 manage.py startapp api 命令创建一个api应用
注意:创建完后一定要在setting中进行配制:
这里必须强调这点,因为如果忘记,后期在api下models.py下创建的数据就无法迁移至数据路中
api/models.py(自行添加数据)
from django.db import models class Userinfo(models.Model):
user_type = (
(1,'青铜'),
(2,'黄金'),
(3,'钻石'),
)
user_type = models.IntegerField(choices=user_type)
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
version/urls.py
from django.conf.urls import url,include
from django.contrib import admin urlpatterns = [
url(r'^admin/', admin.site.urls),
url('api/', include('api.urls')),
]
api/urls.py
from django.conf.urls import url
from api.views import UserView urlpatterns = [
url(r'users/', UserView.as_view()),
]
api/views.py(QueryParameterVersioning用于去GET参数中取version)
from django.shortcuts import render,HttpResponse
from rest_framework.views import APIView
from rest_framework.versioning import QueryParameterVersioning class UserView(APIView):
# 实例化QueryParameterVersioning这个类
versioning_class = QueryParameterVersioning def get(self,request,*args,**kwargs):
print(request.version)
return HttpResponse('ok')
setting.py(注意这里的写法)
#版本
REST_FRAMEWORK = {
"DEFAULT_VERSION":'v1', #默认的版本
"ALLOWED_VERSIONS":['v1','v2'], #允许的版本
"VERSION_PARAM":'version' #GET方式url中参数的名字 ?version=xxx
}
启动:
默认情况下版本v1
指定其他版本则把报错
1.2 在全局setting配置版本信息------------>常用
修改api/urls.py----->这里利用了有名分组
from django.conf.urls import url
from api.views import UserView urlpatterns = [
url(r'(?P<version>\w+)/users/', UserView.as_view()),
]
注释掉我们在views.py下之前的实例化
from django.shortcuts import render,HttpResponse
from rest_framework.views import APIView class UserView(APIView):
# 实例化QueryParameterVersioning这个类
# versioning_class = QueryParameterVersioning def get(self,request,*args,**kwargs):
print(request.version)
return HttpResponse('ok')
全局下的setting.py配置
REST_FRAMEWORK = {
# 版本相关信息
'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',
'VERSION_PARAM':'version', # 这里的这个名字必须和我们的有名分组名称一致
'DEFAULT_VERSION':'v1',
'ALLOWED_VERSIONS':['v1','v2'],
}
启动运行:
不存在则报错
2.版本与分页
创建django框架,创建我们的app(app01),我这里创建django默认创建了这个,再创建一个接口app(api),注意这里的每一个应用都是一个包,都应该包含__init__文件
创建完后需要在setting中INSTALLED_APPS下手动添加我们的app('api.apps.ApiConfig','app01.apps.App01Config',),必须要有这两个app,记得检查下
另外再添加一个渲染器 'rest_framework',用于最后渲染我们的页面
api文件构造:
在api的models下创建字段:(创建完后自己添加几条数据)
class Course(models.Model):
"""专题课/学位课模块表"""
name = models.CharField(max_length=128, unique=True)
api的urls.py下创建路由:
from django.conf.urls import url
from api.views import course urlpatterns = [
url(r'courses/$',course.CoursesView.as_view()),
]
serializers下的course.py:
from rest_framework import serializers # 对course字段序列化
class CourseSerializer(serializers.Serializer):
id = serializers.IntegerField()
name = serializers.CharField()
utils下的response.py
class BaseResponse(object): def __init__(self):
self.code = 1000
self.data = None
self.error = None @property
def dict(self):
return self.__dict__
views下的course.py
from api import models
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination
from api.utils.response import BaseResponse
from api.serializers.course import CourseSerializer # 分页器
class CoursesView(APIView):
def get(self, request, *args, **kwargs):
# 一个返回状态信息的类
ret = BaseResponse()
try:
queryset = models.Course.objects.all()
# 分页
page = PageNumberPagination() # 实例化
# 引用源码提供的方法,最终返回列表类型的数据
course_list = page.paginate_queryset(queryset,request,self)
# 分页后将结果序列化
ser = CourseSerializer(instance=course_list,many=True)
# 给我们的对象传值
ret.data = ser.data
except Exception as e:
ret.code = 500
ret.error = "获取数据失败" return Response(ret.dict)
以上api中的构造基本完成,我们的总路由(与setting同级目录下)的urls.py:
from django.conf.urls import url,include
from django.contrib import admin urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/(?P<version>\w+)/',include('api.urls')),
]
最终,我们事先版本以及分页效果,还要在setting下添加一下配置信息:
REST_FRAMEWORK = {
# 版本相关信息
'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',
'VERSION_PARAM':'version',
'DEFAULT_VERSION':'v1',
'ALLOWED_VERSIONS':['v1','v2'],
# 分页相关信息,数字代表一页几条数据
'PAGE_SIZE':2
}
ok。效果如下:
我们只添加了两个版本v1和v2,现在改成v3:
Restframework的版本及分页的更多相关文章
- python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
- 关于Thinkphp3.2版本的分页问题
最近公司官网改版,需要把旧的thinkphp版本换到现在最新的3.2去,因此,就开展了一系列的升级工作..在修改命名空间的同时,发现Page分页类能正常运行了,但是分页的链接却是错误的,例如在Admi ...
- rest-framework框架——版本
一.DRF版本控制介绍 随着项目更新,版本会越来越多,不能新的版本出现,旧版本就不再使用维护了.因此不同的版本会有不同的处理,且接口会返回不同的信息. API版本控制允许我们在不同的客户端之间更改行为 ...
- bootstrap-table.min.js不同版本返回分页参数不同的问题
1.使用公司用的bootstrap-table.min.js ,刚开始bootstrap-table分页参数是这么写的 分页查询参数: 后端代码为: Result返回类的参数为list,以及total ...
- Mybatis Plus 3.4版本之后分页插件的变化
一.MybatisPlusInterceptor 从Mybatis Plus 3.4.0版本开始,不再使用旧版本的PaginationInterceptor ,而是使用MybatisPlusInter ...
- Django rest-framework框架-组件之分页
分页: a. 分页,看第n页, 每页显示n条数据 from rest_framework import serializers from api import models from rest_fra ...
- 自定义angularjs分页控件
继昨天写了knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页 ,正好最近刚学习angularjs ,故琢磨着写一个angularjs版本的分页 ...
- ReactJS实现的通用分页组件
大家多少都自己写过各种版本的分页工具条吧,像纯服务版的,纯jsWeb板的,Angular版的,因为这个基础得不能再基础的功能太多地方都会用到,下面我给出以个用ReactJS实现的版本,首先上图看下效果 ...
- Mybatis + SpringMVC + Maven实现分页查询
使用Mybatis + Maven + SpringMVC 运行时,突然被需要分页查询的功能给难住了 这里推荐采用的插件是PageHelper这个插件,使用起来十分方便.该插件支持以下数据库: Ora ...
随机推荐
- Linux下Makefile的automake生成全攻略--转
http://www.yesky.com/120/1865620.shtml 作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下 ...
- HDU 1257——最少拦截系统——————【LIS变型题】
最少拦截系统 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- 【Postman】Postman的安装和使用
Postman一款非常流行的API调试工具.其实,开发人员用的更多.因为测试人员做接口测试会有更多选择,例如Jmeter.soapUI等.不过,对于开发过程中去调试接口,Postman确实足够的简单方 ...
- RestTemplate请求出现401错误
最近遇到一个请求API接口总是报401 Unauthorized错误,起初是认为这个是平台返回的,后来用Postman请求,发现平台其实返回的是一串json,里面带有一些权限验证失败的消息,但到我们代 ...
- Spring Chapter4 WebSocket 胡乱翻译 (一) 一个例子
因为没有基础,不知道从哪里入手. 文档里的例子,https://github.com/rstoyanchev/spring-websocket-portfolio,这个除了WebSocket,还整了S ...
- CSS Hack兼容
CSS中有很多标签在不同浏览器中有不同的兼容性问题,问了让网页的功能更好的不同浏览器中显示正常, 需要通过hack的方式来解决浏览器兼容问题. CSS hack问题由来已久,目前我的了解甚少,以下是转 ...
- js数组的sort排序的原理和应用
1.js sort()方法的应用: 首先:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串( ...
- Ubuntu16.04安装Docker1.12+开发实例+hello world+web应用容器
本次主要是详细记录Docker1.12在Ubuntu16.04上的安装过程,创建Docker组(避免每次敲命令都需要sudo),Docker常用的基本命令的总结,在容器中运行Hello world,以 ...
- VC6.0静态编译注意事项
选择静态编译(工程->常规->Microsoft基础类->使用MFC作为静态链接库)的时候,会报错:MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: ...
- (阿里巴巴)数据库连接池——Druid (未完持续更新)
Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色的性能,也 ...