zoukankan      html  css  js  c++  java
  • DRF的视图组件

    对之前使用视图组件进行接口优化

      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
  • 相关阅读:
    CF1454F Array Partition
    leetcode1883 准时抵达会议现场的最小跳过休息次数
    leetcode1871 跳跃游戏 VII
    leetcode1872 石子游戏VIII
    CF1355C Count Triangles
    CF1245D Shichikuji and Power Grid
    CF1368C Even Picture
    CF1368D AND, OR and square sum
    CF1395C Boboniu and Bit Operations
    SpringBoot和开发热部署
  • 原文地址:https://www.cnblogs.com/chenxi67/p/10085099.html
Copyright © 2011-2022 走看看