源码继承关系(最优化):
三大模块: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)