drf小练习2

2023-11-12

目录

1 使用GenericAPIView写出book的5个接口

2 使用面向对象,写5个父类, 继承GenericAPIView+某几个父类后,就有某几个接口   

方法一:

方法二

九个子类视图

方式一

方式二


 

1 使用GenericAPIView写出book的5个接口

models.py

from django.db import models


class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.CharField(max_length=32)
    publish = models.CharField(max_length=32)


serializer.py

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    # name = serializers.CharField(max_length=32)
    # price = serializers.CharField(max_length=32)
    # publish = serializers.CharField(max_length=32)

    class Meta:
        model = Book
        fields = "__all__"

urls.py

from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('books/', views.BookView.as_view()),
    path('books/<int:pk>', views.BookDetailView.as_view()),
]

views.py

from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from .models import Book
from .serializer import BookSerializer


class BookView(GenericAPIView):
    queryset= Book.objects.all()
    serializer_class = BookSerializer

    def get(self,request):
        book_list = self.get_queryset()
        ser = self.get_serializer(instance=book_list,many=True)
        return Response(ser.data)

    def post(self,request):
        ser = self.get_serializer(data=request.data)
        if ser.is_valid():
            ser.save()
            return Response({'code':100,'msg':'新增成功'},status=201)
        else:
            return Response({'code':101,'msg':ser.errors})


class BookDetailView(GenericAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    def get(self,request,pk):
        book = self.get_object()
        ser = self.get_serializer(instance=book)
        return Response(ser.data)


    def put(self,request,pk):
        book = self.get_object()
        ser = self.get_serializer(instance=book,data=request.data)
        if ser.is_valid():
            ser.save()
            return Response({'code':100,'msg':'修改成功'},status=201)

    def delete(self,request,pk):
        Book.objects.filter(pk=pk).delete()
        return Response('')

 

2 使用面向对象,写5个父类, 继承GenericAPIView+某几个父类后,就有某几个接口
   

eg: 新增1条
    GenericAPIView+Create

方法一:

模型类与序列化类以及路由使用的还是上边的代码

views.py


class GetAll():
    def get(self, request):
        book_list = self.get_queryset()
        ser = self.get_serializer(instance=book_list, many=True)
        return Response(ser.data)

class Post():
    def post(self, request):
        ser = self.get_serializer(data=request.data)
        if ser.is_valid():
            ser.save()
            return Response({'code': 100, 'msg': '新增成功'}, status=201)
        else:
            return Response({'code': 101, 'msg': ser.errors})

class GetOne():
    def get(self,request,pk):
        book = self.get_object()
        ser = self.get_serializer(instance=book)
        return Response(ser.data)

class Put():
    def put(self,request,pk):
        book = self.get_object()
        ser = self.get_serializer(instance=book,data=request.data)
        if ser.is_valid():
            ser.save()
            return Response({'code':100,'msg':'修改成功'},status=201)

class Del():
    def delete(self,request,pk):
        Book.objects.filter(pk=pk).delete()
        return Response('')



class BookView(GenericAPIView,GetAll,Post):
    queryset= Book.objects.all()
    serializer_class = BookSerializer


class BookDetailView(GenericAPIView,GetOne,Put,Del):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

方法二

class CheckOne(GenericAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    def get(self, request, pk):
        book = self.get_object()
        ser = self.get_serializer(instance=book)
        return Response(ser.data)


class CheckAll(GenericAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    def get(self, request):
        book_list = self.get_queryset()
        ser = self.get_serializer(instance=book_list, many=True)
        return Response(data=ser.data)


class AddOne(GenericAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    def post(self, request):
        ser = self.get_serializer(data=request.data)
        if ser.is_valid():
            ser.save()
            return Response(ser.data)
        else:
            return Response(ser.errors)


class ChangeOne(GenericAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    def put(self, request, pk):
        book = self.get_object()
        ser = self.get_serializer(instance=book, data=request.data)
        if ser.is_valid():
            ser.save()
            return Response(ser.data)
        else:
            return Response({'code': 100, 'msg': '修改成功'})


class DeleteOne(GenericAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    def delete(self, request, pk):
        self.get_queryset().filter(pk=pk).delete()
        return Response('ok')


class BookView(CheckAll, AddOne):
    def __init__(self):
        super(CheckAll, self).__init__()
        super(AddOne, self).__init__()


class BookDetailView(CheckOne, ChangeOne, DeleteOne):
    def __init__(self):
        super(CheckOne, self).__init__()
        super(ChangeOne, self).__init__()
        super(DeleteOne, self).__init__()

九个子类视图

方式一

# Create your views here.

# 1:查看一条数据
class CheckOne:
    def get(self, request, pk):
        book = self.get_object()
        ser = self.get_serializer(instance=book)
        return Response(ser.data)
# 2:查看所有数据
class CheckAll:
    def get(self, request):
        book_list = self.get_queryset()
        ser = self.get_serializer(instance=book_list, many=True)
        return Response(data=ser.data)
# 3.增加一条数据
class AddOne:
    def post(self, request):
        ser = self.get_serializer(data=request.data)
        if ser.is_valid():
            ser.save()
            return Response(ser.data)
        else:
            return Response(ser.errors)
# 4:修改一条数据
class ChangeOne:
    def put(self, request, pk):
        book = self.get_object()
        ser = self.get_serializer(instance=book, data=request.data)
        if ser.is_valid():
            ser.save()
            return Response(ser.data)
        else:
            return Response({'code': 100, 'msg': '修改成功'})
# 5:删除一条数据
class DeleteOne:
    def delete(self, request, pk):
        self.get_queryset().filter(pk=pk).delete()
        return Response('ok')

# 6:查看所有+增加一条
class GetAllandPost(CheckAll, AddOne):
    def __init__(self):
        super(CheckAll, self).__init__()
        super(AddOne, self).__init__()

# 7:查看一条+修改一条
class GetOneandPut(CheckOne, ChangeOne):
    def __init__(self):
        super(CheckOne, self).__init__()
        super(ChangeOne, self).__init__()

# 8:查看一条+删除一条
class GetOneandDelete(CheckOne, DeleteOne):
    def __init__(self):
        super(CheckOne, self).__init__()
        super(DeleteOne, self).__init__()
# 9:删除一条+修改一条
class DeleteandPut(DeleteOne, ChangeOne):
    def __init__(self):
        super(DeleteOne, self).__init__()
        super(DeleteOne, self).__init__()

# class BookView(GenericAPIView, CheckAll, AddOne):
#     queryset = Book.objects.all()
#     serializer_class = BookSerializer
#     def __init__(self):
#         super(CheckAll, self).__init__()
#         super(AddOne, self).__init__()


# class BookDetailView(GenericAPIView, CheckOne, ChangeOne, DeleteOne):
#     queryset = Book.objects.all()
#     serializer_class = BookSerializer
#     def __init__(self):
#         super(CheckOne, self).__init__()
#         super(ChangeOne, self).__init__()
#         super(DeleteOne, self).__init__()

class BookDetailView(GenericAPIView,GetOneandPut):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    def __init__(self):
        super(CheckOne, self).__init__()
        super(ChangeOne, self).__init__()
        
class BookView(GenericAPIView, GetAllandPost):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    def __init__(self):
        super(GetAllandPost, self).__init__()

方式二

class GetAll(GenericAPIView):
    def get(self, request):
        print(self.__dict__)
        queryset = self.get_queryset()
        ser = self.get_serializer(instance=queryset, many=True)
        return Response(ser.data)


class GetOne(GenericAPIView):
    def get(self, request, pk):
        obj = self.get_object()
        ser = self.get_serializer(instance=obj)
        return Response(ser.data)


class Create(GenericAPIView):
    def post(self, request):
        ser = self.get_serializer(data=request.data)
        if ser.is_valid():
            ser.save()
            return Response(ser.data)
        return Response(ser.errors)


class Alter(GenericAPIView):
    def put(self, request, pk):
        obj = self.get_object()
        ser = self.get_serializer(instance=obj, data=request.data)
        if ser.is_valid():
            ser.save()
            return Response(ser.data)
        return Response(ser.errors)


class Delete(GenericAPIView):
    def delete(self, request, pk):
        self.get_queryset().filter(pk=pk).delete()
        return Response()


class A(GetAll):
    pass


class B(Create):
    pass


class C(GetOne):
    pass


class D(Alter):
    pass


class E(Delete):
    pass


class F(GetAll, Create):
    pass


class G(GetOne, Alter):
    pass


class H(Alter, Delete):
    pass


class J(Delete):
    pass


class I(GetOne, Alter, Delete):
    pass


class BookView(A):
    queryset = Book.objects.all()
    serializer_class = BookSerializers


class Book2View(G):
    queryset = Book.objects.all()
    serializer_class = BookSerializers

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

drf小练习2 的相关文章

随机推荐

  • spring mvc中log4j的配置与使用

    原文地址 http rockelixir iteye com blog 1902352 如果使用spring插件创建一个spring template project 它会默认带log4j 只要改下log4j的配置就可以使用了 如果自己创建
  • ppt地图分布图一块一块的怎么做_没想到地图还能这么用,简直是PPT图表神器!...

    本期导读 如何让你的PPT看起来高大上 本文教你一个鲜为人知的视觉化技巧 利用电子地图 制作PPT图表 即便你不懂PS 不懂设计 也能轻松上手 PPT地图图表的妙用 三种PPT地图的创建方法 本文是2019年3月推送的第20篇干货 计159
  • 全国电赛K题江苏省二等奖----王澳刚

    2017年TI杯江苏省大学生电子设计大赛 题目 单相用电器分析监测装置 题目编号 K题 参赛队编号 ZJ022 参赛队学校 江苏科技大学 参赛队学生 王澳刚 雷松泽 匡正 指导老师 王宝忠 李垣江 二0一七年八月 摘 要 本系统以STM32
  • TCP:为什么是三次握手

    定义 HTTP是基于传输层的TCP协议 而TCP是一个端到端的面向连接的协议 所谓的端到端可以理解为进程到进程之间的通信 所以HTTP在开始传输之前 首先需要建立TCP连接 而TCP连接的过程需要所谓的 三次握手 在TCP三次握手之后 建立
  • C++从入门到放弃之:C++ 左值引用与右值引用详解

    C 从入门到放弃 C 引用 1 左值引用 2 万能引用 常引用 3 右值引用 4 引用型函数返回值 5 引用和指针 6 函数传参传递指针和引用的区别 总结 C 引用 1 左值引用 定义 引用即别名 某个变量的别名 对引用的操作就等同于对变量
  • idea导入java文件_怎么在idea中导入Java文件并运行文件

    怎么在idea中导入Java文件并运行文件 发布时间 2020 06 22 20 58 37 来源 亿速云 阅读 926 作者 元一 这篇文章将为大家详细讲解有关怎么在idea中导入Java文件并运行文件 小编觉得挺实用的 因此分享给大家做
  • Golang-循环变量作用域针对那些数据类型会出现问题

    一 原因 在 Go 中 循环变量的作用域是整个 for 循环语句块 因此 循环变量在 for 循环语句块中的代码都是可见的 但是 当循环变量的值被用于闭包 协程或者使用指针类型的数据结构时 会出现一些问题 这是因为循环变量的值在每一次迭代中
  • Add One

    Add One 题意 给一个数n 有m次操作 每次操作把n的每一位加一 例如1912操作一次后变成21023 问操作m次后 数字的位数 思路 可以初始化0 9每一个数字操作k次后的位数f i k k lt m 然后把n的每一位操作后的长度加
  • LeetCode-Python-1584. 连接所有点的最小费用(MST)

    给你一个points 数组 表示 2D 平面上的一些点 其中 points i xi yi 连接点 xi yi 和点 xj yj 的费用为它们之间的 曼哈顿距离 xi xj yi yj 其中 val 表示 val 的绝对值 请你返回将所有点
  • Java-网络编程

    网络通信 1 两台及以上设备之间通过网络实现数据传输 2 将数据通过网络从一台设备传送到另一台设备 3 java net包下提供了一系列的类或者接口使用来实现网络通信 网络 1 两台或者多台设备通过一定物理设备连接起来构成了网络 2 根据覆
  • 【Android】-- 编辑框EditText、焦点变更监视器、文本变化监视器

    一 编辑框EditText 编辑框用于接收键盘输入的文字 由文本视图派生而来 除了TextView已有的各种属性和方法 EditText还支持下列XML属性 inputType 指定输入的文本类型 输入类型的取值说明如下表 若同时使用多种文
  • GOTURN——Learning to Track at 100 FPS with Deep Regression Networks

    文章的题目叫 Learning to Track at 100 FPS with Deep Regression Networks 算法简称 GOTURN Generic Object Tracking Using Regression N
  • 在企业当中搭建samba服务器

    目录 项目简介 项目分析 项目实施 1 修改防火墙设置 2 安装samba并启动samba服务 3 建立共享目录 4 创建访问账号 5 修改配置文件 6 测试配置文件 7 测试Samba服务器 1 完成只有行政部的用户可以上传和删除comp
  • 判断字符串是否是正确的IP格式的C语言函数

    来自 http blog csdn net shanzhizi 一个用于识别字符串是否是IPV4的C语言函数 保留下来供大家参考使用 include
  • Unity-C#中关于时间戳的一些方法

    转自 http www narkii com club thread 367980 1 html
  • 【FPGA】RGMII接口

    目录 1 RGMII 接口概要 2 RGMII 接口介绍 2 1 MII接口 2 2 RMII接口 2 3 GMII接口 2 4 RGMII接口 1 RGMII 接口概要 以太网的通信离不开物理层 PHY 芯片的支持 以太网 MAC 和 P
  • linux中printf命令,总结linux下printf命令的用法

    printf format and print date 通过printf的选项格式化输出数据 基本英文学习 二进制 binanry number 八进制 otcal number 十进制 decimal number 十六进制 hexad
  • Codeforces Round #697 (Div. 3) C. Ball in Berland(1400)

    Codeforces 1475 C Ball in Berland 题目分析 这个题其实就是给你一堆坐标 让你找到合适的有多少对 思路分析 坐标的话 首先想到用 pair
  • SPSS语法的使用

    SPSS语法的使用 CDA数据分析师官网
  • drf小练习2

    目录 1 使用GenericAPIView写出book的5个接口 2 使用面向对象 写5个父类 继承GenericAPIView 某几个父类后 就有某几个接口 方法一 方法二 九个子类视图 方式一 方式二 1 使用GenericAPIVie