对之前使用视图组件进行接口优化
1.使用视图组件的mixin进行接口逻辑优
导入mixin
from rest_framework.mixinx import ( ListModelMix, CreateModelMixin, DestroyModelMixin, UpdateModelMixin, RetrieveModelMixin )
models.py
from django.db import models # Create your models here. class Author(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.IntegerField() def __str__(self): return self.name class Publish(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) city = models.CharField(max_length=32) email = models.EmailField() def __str__(self): return self.name class Book(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=32) price = models.DecimalField(max_digits=5,decimal_places=2) publish = models.ForeignKey(to="Publish",related_name="book",related_query_name="book_query",on_delete=models.CASCADE) authors = models.ManyToManyField(to="Author")
urls.py
from django.contrib import admin from django.urls import path,re_path from app01 import views urlpatterns = [ path('admin/', admin.site.urls), path('books/', views.BookView.as_view()), re_path('books/(?P<pk>d+)', views.BookFilterView.as_view()), ]
view.py
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.mixins import ( ListModelMixin, CreateModelMixin, DestroyModelMixin, UpdateModelMixin, RetrieveModelMixin ) from app01.models import ( Book,Publish,Author ) from .app_serializers import BookSerializer class BookView(ListModelMixin, CreateModelMixin, GenericAPIView): queryset = Book.objects.all() serializer_class = BookSerializer def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs): return self.create(request, *args, **kwargs) class BookFilterView(RetrieveModelMixin, DestroyModelMixin, UpdateModelMixin, GenericAPIView): queryset = Book.objects.all() serializer_class = BookSerializer def get(self, request, *args, **kwargs): return self.retrieve(request, *args, **kwargs) def put(self, request, *args, **kwargs): return self.update(request, *args, **kwargs) def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs)
注意:单条数据操作的url是这样的:re_path(r'books/(?P<pk>d+)/$, views.BookFilterView.as_view())
还可以进行优化---使用视图组件的view进行接口逻辑优化
导入模块
from rest_framework import generics
可以把改 view.py
class BookView(generics.ListCreateAPIView) queryset = Book.objects.all() serializer_class = BookSerializer class BookFilterView(generics.RetrieveUpdateDestroyAPIView): queryset = Book.objects.all() serializer_class = BookSerializer
最后改成------使用视图组件的viewset进行接口逻辑优化
导入模块
from rest_framework.viewsets import ModelViewSet
urls.py
from django.contrib import admin from django.urls import path,re_path from app01 import views urlpatterns = [ path('bookssss/', views.BooksssView.as_view({ "get": "list", "post": "create", })), re_path('bookssss/(?P<pk>d+)', views.BooksssView.as_view({ "get": "retrieve", "put": "update", "delete": "destroy" })), ]
view.py
class BookView(ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer1