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
  • 相关阅读:
    日历
    复数的运算
    大数的计算
    poj 1562
    POJ 1002
    利用正则表达式检测违禁字
    js实现一个闹钟
    jQuery实现五星好评
    jquery实现计算器功能
    横向轮播图
  • 原文地址:https://www.cnblogs.com/chenxi67/p/10085099.html
Copyright © 2011-2022 走看看