rest

    xiaoxiao2022-07-02  105

    解析模块

    对于传输过来的数据进行有针对性的解析,其中有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 })
    最新回复(0)