解析模块
对于传输过来的数据进行有针对性的解析,其中有form-data(MultiPartParser),from-urlencoded(FormParser),json(JSONParser),只对存在parser_classes 中的数据类型进行解析,默认三种都有。
# views.py
from rest_framework.viewsets import ModelViewSet
from rest_framework.parsers import MultiPartParser, FormParser, JSONParser
from rest_framework.response import Response
class TestParsers(ModelViewSet):
# 插拔式:选择性定制解析模块
# 配置用户不同方式提交数据,服务器能否提供解析
parser_classes = [MultiPartParser, FormParser, JSONParser] # 局部配置
def post(self, request, *args, **kwargs):
return Response({
'status': 0,
'msg': 'TestParsers',
'results': request.data
})
# settings.py
# 全局配置
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': (
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser',
)
}
# urls.py
url(r'^parsers/', views.TestParsers.as_view({'post': 'post'})),
响应模块
响应模块有两种响应的模式JSONRenderer和BrowsableAPIRenderer。JSONRenderer响应返回json数据类型,BrowsableAPIRenderer响应在浏览器中渲染对应的rest_framework页面,通常情况下项目开发完成之后会禁用BrowsableAPIRenderer
# views.py
# 响应模块:
from rest_framework.viewsets import ModelViewSet
from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer
from rest_framework.response import Response
class TestRenderers(ModelViewSet):
# 插拔式:选择性定制响应模块
# 配置服务器提供的不同响应数据的方式
# renderer_classes = [JSONRenderer]
def get(self, request, *args, **kwargs):
return Response({
'status': 0,
'msg': 'TestRenderers',
})
# settings.py
# 全局配置
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
),
}
# urls.py
url(r'^renderers/', views.TestRenderers.as_view({'get': 'get'})),
版本控制模块
基础配置
REST_FRAMEWORK = {
# 默认版本
'DEFAULT_VERSION': 'v1',
# 现存版本
'ALLOWED_VERSIONS': ['v1', 'v2'],
# url的参数key
'VERSION_PARAM': 'version',
}
通过请求参数完成版本配置
# api.site.com/versioning/?version=v1 | api.site.com/versioning/?version=v2
# -- QueryParameterVersioning
# -- url(r'^versioning/', views.TestVersioning.as_view({'get': 'get'})),
# -- 请求:/versioning/?version=v1 | /versioning/?version=v2
from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response
from rest_framework.versioning import QueryParameterVersioning
class TestVersioning(ModelViewSet):
versioning_class = QueryParameterVersioning
def get(self, request, *args, **kwargs):
# print(request.version)
# print(request.versioning_scheme)
if request.version == 'v1':
print('v1版本的业务逻辑')
elif request.version == 'v2':
print('v2版本的业务逻辑')
return Response({
'status': 0,
'msg': 'TestVersioning',
'version': request.version
})
通过请求url完成版本配置: 常用
# api.site.com/v1/versioning/ | api.site.com/v2/versioning/
# -- URLPathVersioning
# -- url(r'^(?P<version>(v1|v2)/versioning/', views.TestVersioning.as_view({'get': 'get'})),
# -- 请求:v1/versioning/ | v2/versioning/
from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response
from rest_framework.versioning import URLPathVersioning
class TestVersioning(ModelViewSet):
versioning_class = URLPathVersioning
def get(self, request, *args, **kwargs):
if request.version == 'v1':
print('v1版本的业务逻辑')
elif request.version == 'v2':
print('v2版本的业务逻辑')
return Response({
'status': 0,
'msg': 'TestVersioning',
'version': request.version
})