应用 Mixin 混合类进行收货地址接口开发
python ../manage.py startapp address
继承了mixins扩展类,进到里面可以稍微看下源码
该方法帮我们实现了获取验证及保存的功能
address/views
from rest_framework.generics import GenericAPIView
from rest_framework.mixins import CreateModelMixinfrom apps.address.models import UserAddress
from apps.address.serializers import AddressSerializer
from apps.order.serializers import OrderGoodsSerializerclass AddressGenericAPIView(GenericAPIView,CreateModelMixin):queryset = UserAddress.objectsserializer_class = AddressSerializerdef post(self,request):return self.create(request)
address/urls
from django.urls import path
from .views import AddressListGenericAPIViewurlpatterns = [path("",AddressGenericAPIView.as_view()),
]
address/serializers.py
from rest_framework import serializersfrom apps.address.models import UserAddressclass AddressSerializer(serializers.ModelSerializer):class Meta:model = UserAddressfields = "__all__"
address/models
from django.db import modelsclass UserAddress(models.Model):email = models.CharField(max_length=255, blank=True, null=True)signer_name = models.CharField(max_length=255, blank=True, null=True)telphone = models.CharField(max_length=255, blank=True, null=True)signer_address = models.CharField(max_length=255, blank=True, null=True)district = models.CharField(max_length=255, blank=True, null=True)default = models.IntegerField(blank=True, null=True)# create_time = models.DateTimeField(blank=True, null=True)class Meta:managed = Falsedb_table = 'user_address'
应用 Mixin 混合类进行收货地址接口开发(二)
获取地址
进入mix可以看到该类,retrieve方法通过传入的参数帮我们获取对应的数据
address/view
class AddressGenericAPIView(GenericAPIView,CreateModelMixin,RetrieveModelMixin):queryset = UserAddress.objectsserializer_class = AddressSerializer# lookup_field字段 这里没有写 因为默认就是pkdef get(self,request,pk):return self.retrieve(request,pk)
address/urls
re_path("(?P<pk>.*)",AddressGenericAPIView.as_view()),
更新和删除
address/views
class AddressGenericAPIView(GenericAPIView,CreateModelMixin,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin):queryset = UserAddress.objectsserializer_class = AddressSerializerdef post(self,request):return self.create(request)def get(self,request,pk):return self.retrieve(request,pk)def put(self,request,pk):return self.update(request,pk)def delete(self,request,pk):return self.destroy(request,pk)
获取所有的地址信息
address/views
class AddressListGenericAPIView(GenericAPIView,ListModelMixin):queryset = UserAddress.objectsserializer_class = AddressSerializerdef get(self,request):return self.list(request)
address/urls
urlpatterns = [path("", AddressGenericAPIView.as_view()),path("list", AddressListGenericAPIView.as_view()),re_path("(?P<pk>.*)", AddressGenericAPIView.as_view()),]
梳理 Mixin 混合类关系图
逐个继承,直到GenericAPIView 多了三个属性queryset,serializer_class,lookup_field,基于这几个属性可以对数据进行不同的操作