k-m*_*mad 10 python django-rest-framework
在DRF源代码中,有一个get_serializer方法.它不是从object继承的,它不是CreateModelMixin类中的方法.这种方法来自哪里?
serializer = self.get_serializer(data=request.data)
Run Code Online (Sandbox Code Playgroud)
这是上下文的大块代码.
from __future__ import unicode_literals
from rest_framework import status
from rest_framework.response import Response
from rest_framework.settings import api_settings
class CreateModelMixin(object):
"""
Create a model instance.
"""
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def perform_create(self, serializer):
serializer.save()
def get_success_headers(self, data):
try:
return {'Location': data[api_settings.URL_FIELD_NAME]}
except (TypeError, KeyError):
return {}
Run Code Online (Sandbox Code Playgroud)
Rah*_*pta 12
CreateModelMixin以及所有其他mixin类(例如ListModelMixin,UpdateModelMixin等)在rest_framework/mixins.py文件中定义 .
这些mixin类提供CRUD模型的所有基本操作.您只需要在通用视图中定义一个serializer_class并queryset执行所有这些操作.DRF已在单独的mixin类中分离出这些常用功能,以便可以在视图中注入/混合它们,并在需要时使用.
在DRF源代码中,有一种
get_serializer方法.它不是从对象继承的,它不是CreateModelMixin类中的方法.这种方法来自哪里?
在GenericAPIView,get_serializer方法被定义.不同mixin类和GenericAPIView类的组合为不同的用例提供了不同的通用视图.
class GenericAPIView(views.APIView):
"""
Base class for all other generic views.
"""
def get_serializer(self, *args, **kwargs):
"""
Return the serializer instance that should be used for validating and
deserializing input, and for serializing output.
"""
serializer_class = self.get_serializer_class()
kwargs['context'] = self.get_serializer_context()
return serializer_class(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
其他通用视图则继承相关mixin沿GenericAPIView.
例如. CreateAPIView继承CreateModelMixin以及GenericAPIView提供create-only端点.
# rest_framework/generics.py
class CreateAPIView(mixins.CreateModelMixin,
GenericAPIView):
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8555 次 |
| 最近记录: |