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. linux下Oracle 相关命令

    #注意:例子中的oralce命令在/home/oracle/oracle/product/10.2.0/db_1/bin目录.#你可以自己修改成自己的目录. A.#dbstart //启动数据库 #d ...

  2. (一)环境安装之Java

    一.安装JDK 点击 JDK8下载,根据自己的平台,选择相应的版本进行下载. Java环境分JDK和JRE ,JDK就是Java Development Kit. 简单的说JDK是面向开发人员使用的S ...

  3. django基本入门

    1.创建应用 2.设计模型 3.语言时区等设置 4. Templates 1.创建应用[MVT] 一个项目可以有多个应用[模块]: 这里已经创建了项目:test1 python manager.py ...

  4. 将金额数字转换为大写汉字的js函数

    //将金额数字转换为大写汉字的函数 function convertCurrency(money) { //汉字的数字 var cnNums = new Array('零', '壹', '贰', '叁 ...

  5. java程序: 倒计时的小程序 (GridPane, Timer, Calendar, SimpleDateFormat ...)

    倒计时程序 涉及到的东西: javafx简单的界面,布局,按钮,文本框,事件响应 java.util.Timer,用于定时 SimpleDateFormat用于在String和Date之间转换. ja ...

  6. MyBatis 中 sqlmapconfig核心标签说明以及配置

    文件介绍 对于 MyBatis 最核心的全局配置文件是 sqlmapConfig.xml 文件,其中包含了数据库的连接配置信息.Mapper 映射文件的加载路径.全局参数.类型别名等. 配置项详解 标 ...

  7. FontSize sp 和 dp 的区别

    dp不会随着“设置->显示->字体大小”的改变而改变,sp会. sp会随着configeration的配置来scale, dp不会. 所以,什么时候用sp, 什么时候用dp需要斟酌.

  8. Backbone事件机制核心源码(仅包含Events、Model模块)

    一.应用场景 为了改善酷版139邮箱的代码结构,引入backbone的事件机制,按照MVC的分层思想搭建酷版云邮局的代码框架.力求在保持酷版轻量级的基础上提高代码的可维护性.   二.遗留问题 1.b ...

  9. cocoapods的安装和安装过程中遇到的问题

    查看当前的ruby版本,我的版本是ruby 2.0.0p648 小于2.2安装cocoapods时会遇到以下问题 $ ruby -v 查看当前ruby源,默认为 https://rubygems.or ...

  10. log4.j

    导入第三方jar包 第一步:右击工程名,新建一个文件夹(Fold),名字为lib. 第二步:把第三方jar包复制到lib目录下. 第三步:右击工程名---->properties ----> ...