zoukankan      html  css  js  c++  java
  • Django-GenericAPIView 和mixins实现增删改查

    1.GenericAPIView 和mixins 的使用:

    1.1 在 user/urls.py 中添加路由

    from django.contrib import admin
    from django.urls import path
    from dayapp.views import *
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('cate', CateView.as_view()),
        path('cate/<int:pk>/', CateInfoView.as_view()),#修改和删除重新写一个视图
        path('good', GoodView.as_view()),
        path('good/<int:pk>/', GoodInfoView.as_view()),#修改和删除重新写一个视图
    ]
    

    1.2创建user/serializers.py写序列化器

    from rest_framework import serializers
    from .models import *
    from rest_framework.validators import ValidationError
    
    
    class Cateser(serializers.ModelSerializer):
        class Meta:
            model = Cate
            fields = '__all__'
    
    
    class Goodser(serializers.ModelSerializer):
        # 自定义验证上传图片
        pic = serializers.ImageField(use_url=False)
    
        def validate_pic(self, file):
            # 获取文件名 大小
            name = file.name
            size = file.size  # 大小返回的单位是字节数
            print(name, size)  # 打印文件名 文件大小
    
            if size > 2 * 1024 * 1024:
                raise ValidationError('文件大小超过2M')  # 抛出异常
            else:
                pass
            if name.split(".")[-1] not in ("jpg", "jpeg"):
                raise ValidationError('文件格式不是jpg或jpeg')  # 抛出异常
            return file
    
        class Meta:
            model = Good
            fields = '__all__'
    
    
    

    1.3 在 user/views.py 中添加视图函数

    from rest_framework.generics import GenericAPIView
    from rest_framework.mixins import ListModelMixin,CreateModelMixin,
    RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
    from .sers import *
    
    # 导入列表分页类
    from rest_framework.pagination import PageNumberPagination
    from rest_framework.response import Response
    
    
    class CateView(GenericAPIView, ListModelMixin, CreateModelMixin):
        queryset = Cate.objects.all()
        serializer_class = Cateser
    
        def get(self, request):  #查询
            return self.list(request)
    
        def post(self, request):	#增加
            response = self.create(request)
            return response
    
    
    class CateInfoView(GenericAPIView, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin):
        queryset = Cate.objects.all()
        serializer_class = Cateser
    
        def get(self, request, pk):  # 检索
            return self.retrieve(request)
    
        def put(self, request, pk):	#修改
            return self.partial_update(request)  # partial_update 部分更新
    
        def delete(self, request, pk):	#删除
            return self.destroy(request)
    
    #自定义分页
    class BookPage(PageNumberPagination):
        page_size = 3  # 设置 一页 大小
        page_query_param = 'p'  # 重新配置页码的参数名
    
        def get_paginated_response(self, data):  # data 是本页的数据
            # 我们需要返回 上一页页码 下一页页码  当前页的数据 还有总页数
            number = self.page.number  # 当前页数
            page_nums = self.page.paginator.num_pages  # 总页数
            if number > 1:
                prev_number = number - 1
            else:
                prev_number = None
            if number < page_nums:
                next_number = number + 1
            else:
                next_number = None
    
            resp = {}
            resp['prev_number'] = prev_number
            resp['next_number'] = next_number
            resp['page_nums'] = page_nums
            resp['data'] = data
    
            return Response(resp)
    
    
    class GoodView(GenericAPIView, ListModelMixin, CreateModelMixin):
        queryset = Good.objects.all()
        serializer_class = Goodser
    
        # 设置列表分页
        pagination_class = BookPage
    
        def get(self, request):
            return self.list(request)
    
        def post(self, request):
            response = self.create(request)
            return response
    
    
    class GoodInfoView(GenericAPIView, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin):
        queryset = Good.objects.all()
        serializer_class = Goodser
    
        def get(self, request, pk):  # 检索
            return self.retrieve(request)
    
        def put(self, request, pk):
            return self.partial_update(request)
    
        def delete(self, request, pk):
            return self.destroy(request)
    
    
    从小白到大神的蜕变~~
  • 相关阅读:
    1.23学习总结:文件流
    vue-router重写push方法,解决相同路径跳转报错,解决点击菜单栏打开外部链接
    手把手教Electron+vue,打包vue项目,打包成桌面程序。
    后台获取的map集合封装json
    VUE同级组件之前方法调用
    字节跳动今日头条-抖音小程序序html富文本显示解决办法
    别总写代码,这130个网站比涨工资都重要
    vue 组件之间的自定义方法互相调用
    swiper轮播图出现疯狂抖动(小程序)
    vue通过地址下载文件
  • 原文地址:https://www.cnblogs.com/tjw-bk/p/13854556.html
Copyright © 2011-2022 走看看