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. MySQL之基本语句

    SQL是Structure Query language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言.在众多开源数据库中,MySQL正是其中最杰出的代表,MySQL是由三个瑞典人于20世 ...

  2. (六-1)Firefox插件安装

    1.安装火狐插件 ①旧版本firefox 火狐浏览器右上角-->附件-->获取更多附件-->搜索-->Firebug 安装 Firebug 扩展:https://addons. ...

  3. JavaScript对象 创建对象(二)

    组合使用构造函数和原型模式创建对象 function Person(name, age, job){ this.name = name; this.age = age; this.job = job; ...

  4. javaweb九大个内置对象,四大域

    9个内置对象如下: 1.session对象:会话对象 当客户端第一次访问服务器的页面时,web服务器会自动为该客户端创建一个session对象并分配一个唯一的id号 常常用它来在多个页面间共享数据,如 ...

  5. 使用Razor

    新建一个名称为Rezor的mvc空项目,定义一个模型内容 public class Product { //定义模型 public int ProductID { get; set; } public ...

  6. (五)html部分标签元素补充

    html标签元素十分的多,一次性掌握全部,那是不可能的,在后续的学习中,会不断补充标签元素... 1.行元素和块元素 行标签元素即是标签元素根据内容大小进行自适应,而不是占据一整行. 如<spa ...

  7. C/C++中的auto关键词

    C语言 auto被解释为一个自动存储变量的关键字,也就是申明一块临时的变量内存. 例如: auto double a=3.7; 表示a为一个自动存储的临时变量. C++语言 C++ 98标准/C++0 ...

  8. mysql四-2:多表查询

    一.介绍 本节主题: 多表连接查询 复合条件连接查询 子查询 准备表: #建表 create table department( id int, name ) ); create table empl ...

  9. struts quick start

    1.create a dynamic web project 2.import the needed jar(about 11) 3. request page(index.jsp) <%@ p ...

  10. js实现图片延时加载的原理

    实现原理: 附:(http://www.cnblogs.com/fishtreeyu/archive/2011/03/12/1982067.html) 把所有需要延时加载的图片改成如下的格式: < ...