我对 DRF(Django Rest Framework)中关于 POST 请求的两种不同方法有疑问。所以我的问题是,是否最好在开始时使用 Approach 2 来保持视图和序列化器更简单,或者从方法 1 开始是否更常见,因为在这种情况下,我将来更有可能需要 .create() 方法?
方法一:
// view.py
class ExampleView1(APIView):
def post(self, request):
data = request.data
serializer = CourseSerializer(data=data, context={"request": request}, partial=True)
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
// serializer .create() method
class ExampleSerializer(ModelSerializer):
def create(self, validated_data):
user = self.context.get("request").user
return Course.objects.create(**validated_data, owner=user)
方法2:
class ExampleView2(APIView):
def post(self, request):
data = request.data
data["owner"] = request.user.pk
serializer = CourseSerializer(data=data)
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
Django 也遵循 home 页面中所述的快速开发和 DRY 原则。
考虑到这一点,这意味着 Django 尊重最小的代码库,考虑到第二种方法是可行的方法。此外,@Willem Van Onsem siggested CreatAPIView 将与此更加一致,因为这将进一步简化序列化器逻辑。