• 最少的代码生成对象


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

    三大模块: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)
    

    源码总图:

  • 相关阅读:
    rowkey设计原则和方法
    ubuntu安装及使用
    sqoop数据迁移
    Hive 自定义UDF操作步骤
    hive之数据导入导出
    MySQL优化
    MongoDB、Redis、elasticSearch、hbase的对比
    数据库基本操作
    count(*) 和 count(1)和count(列名)区别
    BigDecimal的运算——加减乘除
  • 原文地址:https://www.cnblogs.com/lance-lzj/p/13848888.html
Copyright © 2020-2023  润新知