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)

浙公网安备 33010602011771号