博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Restframework的版本及分页
阅读量:5217 次
发布时间:2019-06-14

本文共 4490 字,大约阅读时间需要 14 分钟。

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 modelsclass 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,includefrom django.contrib import adminurlpatterns = [    url(r'^admin/', admin.site.urls),	url('api/', include('api.urls')),]

  api/urls.py

from django.conf.urls import urlfrom api.views import UserViewurlpatterns = [	url(r'users/', UserView.as_view()),]

  api/views.py(QueryParameterVersioning用于去GET参数中取version)

from django.shortcuts import render,HttpResponsefrom rest_framework.views import APIViewfrom rest_framework.versioning import QueryParameterVersioningclass 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 urlfrom api.views import UserViewurlpatterns = [	url(r'(?P
\w+)/users/', UserView.as_view()),]

注释掉我们在views.py下之前的实例化

from django.shortcuts import render,HttpResponsefrom rest_framework.views import APIViewclass 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 urlfrom api.views import courseurlpatterns = [    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 modelsfrom rest_framework.views import APIViewfrom rest_framework.response import Responsefrom rest_framework.pagination import PageNumberPaginationfrom api.utils.response import BaseResponsefrom 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,includefrom django.contrib import adminurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^api/(?P
\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:

 

转载于:https://www.cnblogs.com/LearningOnline/p/9426901.html

你可能感兴趣的文章
2018 ZJCPC
查看>>
【★】浅谈计算机与随机数
查看>>
[转载]宇宙文明等级的划分标准
查看>>
《代码阅读方法与实现》阅读笔记一
查看>>
解决 sublime text3 运行python文件无法input的问题
查看>>
javascript面相对象编程,封装与继承
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>
Java中正则表达式的使用
查看>>
算法之搜索篇
查看>>
新的开始
查看>>
java Facade模式
查看>>
模板的继承和导入 、自定义函数
查看>>
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>
SpringAop与AspectJ
查看>>
Leetcode 226: Invert Binary Tree
查看>>
http站点转https站点教程
查看>>
解决miner.start() 返回null
查看>>
关于MFC中窗口的销毁
查看>>
bzoj 2007: [Noi2010]海拔【最小割+dijskstra】
查看>>
BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)
查看>>