定义好序列化器后,视图类的写法

定义好序列化器后,视图类的写法

from app.models import BookInfo
from app.serializers import BookInfoSerializer
from django.views import View
from django import http
import json


class BookInfoView(View):
    # 1列表视图,获取所有数据
    def get(self,request):

        #1)获取数据
        books = BookInfo.objects.all()
        #2)序列化
        serializer = BookInfoSerializer(instance=books,many=True)

        #3)返回响应
        return http.JsonResponse(serializer.data,safe=False)  #safe=False 可以删除吗??


    #创建单本书籍
    def post(self,request):
        #1获取参数
        dict_data = json.loads(request.body.decode())
        btitle = dict_data.get('btitle')
        bpub_date = dict_data.get('bpub_date')
        bread = dict_data.get('bread')
        bcomment=dict_data.get('bcomment')
        #数据入库
        book = BookInfo.objects.create(**dict_data)
        #数据校验(省略)
        #返回响应
        serializer = BookInfoSerializer(instance=book)
        return http.JsonResponse(serializer.data)

    #获取单本数据
    def get(self,request,pk):
        #1获取数据
        book = BookInfo.objects.get(pk=pk)
        #2序列化
        serializer = BookInfoSerializer(instance=book)
        #3返回数据
        return http.JsonResponse(serializer.data)

    #修改单本数据
    def put(self,request,pk):
        #1获取参数、数据
        book = BookInfo.objects.get(pk=pk)
        dict_data=json.loads(request.body.decode())
        #2检验参数(省略)
        #3数据入库
        BookInfo.objects.filter(pk=pk).update(**dict_data)
        #3返回响应
        serializer = BookInfoSerializer(instance=book)
        return http.JsonResponse(serializer.data)
    ####注意:感觉有问题,获取参数只用了dict_data?对比上面创建单本数据的代码

    #删除单本数据
    def delete(self,request,pk):
        #获取数据
        book = BookInfo.objects.get(pk=pk)
        #删除
        book.delete()
        #返回响应
        return http.JsonResponse(status=204)

代码还是很长,下一节通过反序列化,可简化入库过程和数据获取过程的代码

posted @ 2020-09-17 13:33  亦木121  阅读(176)  评论(0)    收藏  举报