首页 > 其他分享 >DRF学习第二课,实战

DRF学习第二课,实战

时间:2023-05-27 21:35:02浏览次数:37  
标签:实战 第二课 title models pub name book date DRF

1,models模型

class BookInfo(models.Model):
    title=models.CharField(verbose_name="图书名称",max_length=32)
    pub_date=models.DateField(verbose_name="发布日期")
    read=models.IntegerField(default=0,verbose_name="阅读量")
    comment=models.IntegerField(verbose_name="评论量",default=0)
    is_delete=models.BooleanField(verbose_name="是否删除",default=False)
    class Meta:
        verbose_name=verbose_name_plural="图书"
    
    def __str__(self):
        return self.title
class HeroInfo(models.Model):
    gender_choices=(
        (0,'male'),
        (1,'female'),
    )
    name=models.CharField(max_length=32,verbose_name="名称")
    gender=models.SmallIntegerField(choices=gender_choices,default=0,verbose_name="性别")
    des=models.CharField(verbose_name="描述信息",max_length=255,null=True,blank=True)
    book=models.ForeignKey(BookInfo,on_delete=models.CASCADE,verbose_name="图书")
    is_delete=models.BooleanField(verbose_name="是否删除",default=False)
    class Meta:
        verbose_name=verbose_name_plural="英雄"
    
    def __str__(self):
        return self.name

2,urls.py的URL设置

    path('books',views.BooskView.as_view()),
    re_path('books/(?P<pk>\d+)',views.BookView.as_view()),

3,views.py使用

from app01 import models
from django.http import JsonResponse
# Create your views here.
from django.views import View
import json


class BooskView(View):
    """
    获取所有和保存
    """

    def get(self, request):
        # 1,查询所有图书对象2,返回图书数据[{},{}]

        books = models.BookInfo.objects.all()
        book_list = []
        for book in books:
            book_list.append(
                {'id': book.id,
                 'title': book.title,
                 'read': book.read,
                 'comment': book.comment,
                 'pub_date': book.pub_date,
                 }
            )
        return JsonResponse(book_list, safe=False)

    def post(self, request):
        # 1,获取前端数据 2,验证数据 3,保存数据 4,返回结果
        data = request.body.decode()
        data_dic = json.loads(data)
        title = data_dic.get('title')
        pub_date = data_dic.get('pub_date')
        if pub_date is None or title is None:
            return JsonResponse({'error': "书名或日期不能为空"}, status=400)
        book = models.BookInfo.objects.create(title=title, pub_date=pub_date)
        return JsonResponse(
            {
                'id': book.id,
                'title': book.title,
                'read': book.read,
                'comment': book.comment,
                'pub_date': book.pub_date,
            }
        )


class BookView(View):
    """
    获取单条
    """

    def get(self, request, pk):
        try:
            book=models.BookInfo.objects.get(id=pk)
        except:
            return JsonResponse({'error': "ID不存在"}, status=400)
        return JsonResponse(
            {
                'id': book.id,
                'title': book.title,
                'read': book.read,
                'comment': book.comment,
                'pub_date': book.pub_date,
            }
        ) 
    def put(self, request, pk):
         # 1,获取前端数据 
        data = request.body.decode()
        data_dic = json.loads(data)
        title = data_dic.get('title')
        pub_date = data_dic.get('pub_date')
        if pub_date is None or title is None:
            return JsonResponse({'error': "书名或日期不能为空"}, status=400)
        #查询数据是否存在
        try:
            book=models.BookInfo.objects.get(id=pk)
        except:
            return JsonResponse({'error': "书名或日期不能为空"}, status=400)
        #获取数据并保存
        book.title=title
        book.pub_date=pub_date
        book.save()#必须有这个,否则不能成功更新
        
        return JsonResponse(
            {
                'id': book.id,
                'title': book.title,
                'read': book.read,
                'comment': book.comment,
                'pub_date': book.pub_date,
            }
        )

    def delete(self, request, pk):
        try:
            book=models.BookInfo.objects.get(id=pk)
        except:
            return JsonResponse({'error':'错误信息'},status=400)
        #此处是物理删除,正常一般采用逻辑删除。 is_delete=True  book.save()
        book.delete()
        return JsonResponse({})

 

标签:实战,第二课,title,models,pub,name,book,date,DRF
From: https://www.cnblogs.com/superip/p/17437385.html

相关文章

  • drf-过滤、排序、分页
    目录一过滤Filtering1.1内置过滤类1.2第三方过滤类1.3自定义过滤类价格等于44或者书名是红楼梦价格在100----200之间的图书二排序视图类过滤和排序一起使用三分页Pagination视图类page.py四基于APIView写过滤、排序和分页4.1写过滤和排序4.2写分页4.3分页的源码一过滤......
  • 读<Wireshark数据包分析实战-第3版>之流量分类
    目录广播流量广播流量在各个网络层的地址是?对广播地址一直发送数据包,会导致整个局域网网络堵塞吗?组播流量单播流量广播流量广播流量是指在计算机网络中,发送者将数据包(通常是单播)传输给局域网内所有设备的通信方式。广播流量数据包具有特殊的目标地址,即“广播地址”,这使得接收......
  • 阅读《java并发编程实战》第三章
    阅读《java并发编程实战》第三章第一个例子,没有重现publicclassNoVisibility{privatestaticbooleanready;privatestaticintnumber;privatestaticclassReaderThreadextendsThread{publicvoidrun(){while(!ready){......
  • 【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存C
    缓存的理解缓存的工作机制是先从缓存中读取数据,如果没有再从慢速设备上读取实际数据,并将数据存入缓存中。通常情况下,我们会将那些经常读取且不经常修改的数据或昂贵(CPU/IO)的且对于相同请求有相同计算结果的数据存储到缓存中。它能够让数据更加接近于使用者,下图所示。+-------------......
  • 读<Wireshark数据包分析实战-第3版>之网络设备
    集线器集线器(Hub)是网络硬件设备,用于连接多个以太网设备,使它们可以在一个局域网(LAN)内通信。集线器接收来自连接设备的数据包,并将这些数据包广播到所有连接的设备上。集线器工作在OSI模型的第一层,即物理层。相较于交换机和路由器,集线器对流量处理能力较弱,容易产生冲突和拥塞。现如......
  • drf——全局处理异常、接口文档、jwt介绍、based64编码与解码
    全局异常处理原理#对于前端来讲,后端即便报错,也要返回统一的格式,前端便于处理{code:999,msg:'系统异常,请联系系统管理员'}#只要三大认证,视图类的方法出了异常,都会执行一个函数: rest_framework.viewsimportexception_handler#drf只要出了异常就会执行这是drf的配置文件......
  • Netty实战(五)
    (ByteBuf—Netty的数据容器)一、什么是ByteBuf我们前面说过,网络数据的基本单位总是字节。JavaNIO提供了ByteBuffer作为它的字节容器,但是这个类使用起来过于复杂,而且也有些繁琐。ByteBuffer替代品是ByteBuf,一个强大的实现,既解决了JDKAPI的局限性,又为网络应用程序的开发者......
  • x86游戏逆向之实战游戏线程发包与普通发包的逆向
    网游找Call的过程中难免会遇到不方便通过数据来找的或者仅仅查找数据根本找不到的东西,但是网游中一般的工程肯定要发给服务器,比如你打怪,如果都是在本地处理的话就特别容易产生变态功能,而且不方便与其他玩家通信,所以找到了游戏发包的地方,再找功能就易如反掌了。 在游戏逆向过程......
  • Netty实战(五)
    一、什么是ByteBuf我们前面说过,网络数据的基本单位总是字节。JavaNIO提供了ByteBuffer作为它的字节容器,但是这个类使用起来过于复杂,而且也有些繁琐。ByteBuffer替代品是ByteBuf,一个强大的实现,既解决了JDKAPI的局限性,又为网络应用程序的开发者提供了更好的API。下面我......
  • 《机器人SLAM导航核心技术与实战》第1季:第5章_机器人主机
    《机器人SLAM导航核心技术与实战》第1季:第5章_机器人主机视频讲解【第1季】5.第5章_机器人主机-视频讲解【第1季】5.1.第5章_机器人主机_X86与ARM主机对比-视频讲解【第1季】5.2.第5章_机器人主机_ARM主机树莓派3B+-视频讲解【第1季】5.3.第5章_机器人主机_ARM主机RK......