zoukankan      html  css  js  c++  java
  • 最少的代码生成对象

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

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

    源码总图:

  • 相关阅读:
    Marketcetera中TradeBase所依赖的RoR的gems
    单点登录的实现[转]
    在服务中调用外部的窗体程序出现的问题(转载)
    [转]c#创建access查询
    [转]解决技术问题的一些个人经验
    JSF kick start [转]
    An existing Marketcetera MySQL Server 5.0 instance has been detected. Marketcetera requires it's own instance of MySQL
    编写你自己的单点登录(SSO)服务(转载)
    CAS与LDAP整合的实现[转]
    ASP.NET 配置文件纵横谈(三)
  • 原文地址:https://www.cnblogs.com/lance-lzj/p/13848888.html
Copyright © 2011-2022 走看看