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的版本及分页的更多相关文章

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

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

  2. 关于Thinkphp3.2版本的分页问题

    最近公司官网改版,需要把旧的thinkphp版本换到现在最新的3.2去,因此,就开展了一系列的升级工作..在修改命名空间的同时,发现Page分页类能正常运行了,但是分页的链接却是错误的,例如在Admi ...

  3. rest-framework框架——版本

    一.DRF版本控制介绍 随着项目更新,版本会越来越多,不能新的版本出现,旧版本就不再使用维护了.因此不同的版本会有不同的处理,且接口会返回不同的信息. API版本控制允许我们在不同的客户端之间更改行为 ...

  4. bootstrap-table.min.js不同版本返回分页参数不同的问题

    1.使用公司用的bootstrap-table.min.js ,刚开始bootstrap-table分页参数是这么写的 分页查询参数: 后端代码为: Result返回类的参数为list,以及total ...

  5. Mybatis Plus 3.4版本之后分页插件的变化

    一.MybatisPlusInterceptor 从Mybatis Plus 3.4.0版本开始,不再使用旧版本的PaginationInterceptor ,而是使用MybatisPlusInter ...

  6. Django rest-framework框架-组件之分页

    分页: a. 分页,看第n页, 每页显示n条数据 from rest_framework import serializers from api import models from rest_fra ...

  7. 自定义angularjs分页控件

    继昨天写了knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页 ,正好最近刚学习angularjs ,故琢磨着写一个angularjs版本的分页 ...

  8. ReactJS实现的通用分页组件

    大家多少都自己写过各种版本的分页工具条吧,像纯服务版的,纯jsWeb板的,Angular版的,因为这个基础得不能再基础的功能太多地方都会用到,下面我给出以个用ReactJS实现的版本,首先上图看下效果 ...

  9. Mybatis + SpringMVC + Maven实现分页查询

    使用Mybatis + Maven + SpringMVC 运行时,突然被需要分页查询的功能给难住了 这里推荐采用的插件是PageHelper这个插件,使用起来十分方便.该插件支持以下数据库: Ora ...

随机推荐

  1. 无监督学习(Unsupervised Learning)

    无监督学习(Unsupervised Learning) 聚类无监督学习 特点 只给出了样本, 但是没有提供标签 通过无监督学习算法给出的样本分成几个族(cluster), 分出来的类别不是我们自己规 ...

  2. JavaScript字符串去除空格

    /*字符串去除空格*/ String.prototype.Trim = function() { return this.replace(/(^\s*)|(\s*$)/g, "") ...

  3. select支持多查询,获取分页count

    在我们使用mybatis 时,当我们根据分页去查询数据集时,需要传入的参数有page(页码)和size(每页的条数),而我们期望获取到的数据有,小于或等于size的list数据集,同时我们还需要得到一 ...

  4. 关于JVM

    Java 中通过多线程机制使得多个任务同时执行处理,所有的线程共享JVM内存区域main memory,而每个线程又单独的有自己的工作内存,当线程与内存区域进行交互时,数据从主存拷贝到工作内存,进而交 ...

  5. 重构指南 - 封装集合(Encapsulate Collection)

    封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...

  6. OpenStack各组件详解和通信流程

    一.openstack由来 openstack最早由美国国家航空航天局NASA研发的Nova和Rackspace研发的swift组成.后来以apache许可证授权,旨在为公共及私有云平台建设.open ...

  7. 【JS 综合】JS综合

    视频教程链接:http://www.xuexi111.com/s/javascript/ 张孝祥:http://www.21edu8.com/pcnet/programming/26685/

  8. 《ArcGIS Runtime SDK for Android开发笔记》——数据制作篇:紧凑型切片制作(Server缓存切片)

    1.前言 在ArcGIS 10中出现了一种新的切片缓存文件格式:紧凑型存储(Compact).与之前的松散型存储(Exploded)相比,它有迁移方便.创建更快.减少存储空间等诸多优点,已经成为了现在 ...

  9. Siebel界面的搭建

    Siebel界面的初步搭建都是基于Siebel Tools工具来创建的,其搭建步骤: 1. 首先先创建一个Project项目,点击project--->点 new Record--->输入 ...

  10. .NET部分知识点整理

    .Net学习 Visual Studio2018 企业版:NJVYC-BMHX2-G77MM-4XJMR-6Q8QF 专业版:KBJFW-NXHK6-W4WJM-CRMQB-G3CDH 开发工具常用V ...