最少的代码生成对象

源码继承关系(最优化):

三大模块:APIView, generics, mixins

APIView: 继承另外两大模块

generics:获取对象和序列化

mixins:模型操作

CreateModelMixin源码展示,后续用来被继承创建对象

class CreateModelMixin:
    """
    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': str(data[api_settings.URL_FIELD_NAME])}
        except (TypeError, KeyError):
            return {}

models.py >

from django.db import models


class Good(models.Model):

    g_name = models.CharField(max_length=32)
    g_price = models.IntegerField(default=1)

    class Meta:
        db_table = "good"

在目录下创建序列化文件serializer.py

from rest_framework import serializers
from goods.models import Good


class GoodSerializer(serializers.ModelSerializer):

    class Meta:
        model = Good
        fields = ["id", "g_name", "g_price"]


继承后创建数据:

class GoodsView(GenericAPIView,CreateModelMixin)
    queryset = Good.objects.all()	# 获取结果集
    serializer_class = GoodSerializer   # 序列化数据
    
    def post(self, request):
        
    return self.create(request)
    

调用接口并写入对应字段数据即可生成数据到数据库。

最优化:

class GoodsView(CreateAPIView)
	
    queryset = Good.objects.all()
    serializer_class = GoodSerializer
    

调用接口并写入对应字段数据即可生成数据到数据库。

原因:

CreateAPIView 继承了 CreateModelMixin 和 GenericAPIView 两大模块。且默认方法是post()
class CreateAPIView(mixins.CreateModelMixin,GenericAPIView):

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

源码总图:

posted @ 2020-10-20 20:53  Morpheus1024  阅读(171)  评论(0编辑  收藏  举报