django 视图获取数据的方法

 注意:以上4种请求一共需要创建两个视图类

 以上不带参数pk的为列表视图,带pk的为详情视图

1.列表视图:获取所有书籍

步骤:

1)查询所有数据

2)转换数据

3)返回响应

2.列表视图:创建单本书籍post方法

步骤:

1)获取参数

2)校验参数

3)数据入库

4)返回响应

3.详情视图:获取单本书籍:get方法

步骤:

1)通过pk获取对象

2)转换数据

3)返回响应

注意,需要新建视图类,同事需要配置路由

4.详情视图:修改单本书籍:post方法

1)获取参数,对象

2)校验参数

3)数据入库

4)返回响应

5.详情视图:删除数据:delete方法

步骤:

1)获取数据

2)删除数据

3)返回响应

 

from django.shortcuts import render
from django.views import View
from .models import BookInfo
from django import http
import json
#列表视图-获取所有书籍
class BookInfoView(View):
    def get(self,request):
        '''获取所有书籍'''
        #1,查询所有书籍
        books = BookInfo.objects.all()

        #2数据转换
        book_list = []
        for book in books:
            book_dict={
                'id':book.id,
                'btitle':book.btitle,
                'bpub_date':book.bpub_date,
                'bread':book.bread,
                'bcomment':book.bcomment,
            }
            book_list.append(book_dict)
        #3返回响应,safe=False可以安全返回非字典
        return http.JsonResponse(book_list,safe=False)

    #创建单本书籍
    def post(self,request):
        '''创建单本书籍 '''
        #1获取参数
        dict_data = json.loads(request.body.decode())   #注意,需要引入json
        btitle = dict_data.get('btitle')
        bpub_date = dict_data.get('bpub_date')
        bread = dict_data.get('bread')
        bcomment = dict_data.get('bcomment')
        #2,参数校验(省略)
        #3,数据入库
        book = BookInfo.objects.create(**dict_data)

        #4返回响应(需要将数据重新转换为json)
        book_dict = {
            'id': book.id,
            'btitle': book.btitle,
            'bpub_date': book.bpub_date,
            'bread': book.bread,
            'bcomment': book.bcomment,
        }
        return http.JsonResponse(book_dict)   #此处数据为字典形式,所以不需要指定safe=False


class BookInfoDetail(View):
    def get(self,request,pk):
        #1,通过pk获取对象
        book = BookInfo.objects.get(pk=pk)

        #2,转换数据
        book_dict = {
            'id': book.id,
            'btitle': book.btitle,
            'bpub_date': book.bpub_date,
            'bread': book.bread,
            'bcomment': book.bcomment,
        }

        #3返回数据
        return http.JsonResponse(book_dict)

    #详情视图-更新一条数据
    def put(self,request,pk):
        #1获取参数,对象
        dict_data = json.loads(request.body.decode())
        book = BookInfo.objects.get(pk=pk)

        #2校验参数(省略)
        #3数据入库
        BookInfo.objects.filter(pk=pk).update(**dict_data) #该语句不会返回添加成功的数据
        #4返回响应
        #因上面语句不返回数据,所有需要从数据重新取出该条数据作为响应返回
        book = BookInfo.objects.get(pk=pk)
        book_dict = {
            'id': book.id,
            'btitle': book.btitle,
            'bpub_date': book.bpub_date,
            'bread': book.bread,
            'bcomment': book.bcomment,
        }
        return http.JsonResponse(book_dict)

    #详情视图-删除数据
    def delete(self,request,pk):
        #1获取数据
        book = BookInfo.objects.get(pk=pk)

        #2删除数据
        book.delete()

        #3返回响应
        return http.JsonResponse(status=204)

 

posted @ 2020-09-16 15:44  亦木121  阅读(724)  评论(0)    收藏  举报