rest_framework中的解析模块,响应模块和版本控制模块

解析模块

对于传输过来的数据进行有针对性的解析,其中有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
        })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值