def get(self, request, pk): # 1、通过pk获取对象 book = BookInfo.objects.get(pk=pk) # 2、数据转换 serializer = BookInfoSerializer(instance=book) # 3、返回响应 return http.JsonResponse(serializer.data)
def get(self, request): # 1、查询所有的书籍 books = BookInfo.objects.all() # 2、将对象列表转换为字典列表 serializer = BookInfoSerializer(instance=books, many=True) # 3、返回响应 return Response(serializer.data)
def get(self, request): # 1、查询所有的书籍 books = BookInfo.objects.all() # 2、数据转换 serializer = BookInfoSerializer(instance=books, many=True) # 3、返回响应 return http.JsonResponse(serializer.data, safe=False)
def get(self, request, book_id): # 1、查询书籍 book = BookInfo.objects.get(id=book_id) # 2、将对象列表转换为字典列表 serializer = BookInfoSerializer(instance=book) # 3、返回响应 return Response(serializer.data)
def put(self, req, book_id): data_dict = req.data book = BookInfo.objects.get(id=book_id) ser = BookInfoSerializer(instance=book, data=data_dict) ser.is_valid(raise_exception=True) ser.save() return Response(ser.data, status=status.HTTP_201_CREATED)
def deserializer(request): # 模拟前端提交的数据 # data = {"id":1, "btitle": "西游记之Django开发", "bpub_date": "2000-01-01", "is_delete": 1, "bread": 100, "bcomment": 10} # data = {"hname": "猪八戒", "hbook": 100} data = {"btitle": "水浒传之Django开发5", "bpub_date": "2000-01-01"} # 查询数据库, 得到一个bookInfo模型对象, 用于进行更新 book = BookInfo.query.get(pk=5) # s = BookInfoSerializer(book, data=data) s = BookInfoSerializer(data=data) # s = HeroInfoSerializer(data=data) # 判断前端数据是否合法, True表示合法 print(s.is_valid(raise_exception=True)) # 可以输出错误信息 print(s.errors) # 可以提取处校验结束之后的干净数据 print(s.validated_data) s.save() return HttpResponse("反序列化结束! %s" % s.validated_data)
def put(self, request, pk): # 1、获取参数 dict_data = json.loads(request.body.decode()) # 2、校验参数 book = BookInfo.objects.get(pk=pk) origin_data = BookInfoSerializer(instance=book).data origin_data.update(**dict_data) serializer = BookInfoSerializer(instance=book, data=origin_data, partial=True) try: serializer.is_valid(raise_exception=True) except ValidationError as e: return http.JsonResponse({ 'code': 405, 'msg': next(iter(e.detail.values()))[0].title() }) # 3、数据入库 serializer.save() # 4、返回响应 return http.JsonResponse(serializer.data)
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') # 2、校验参数 ser = BookInfoSerializer(data=dict_data) try: ser.is_valid(raise_exception=True) except ValidationError as error: return http.JsonResponse({ 'code': 405, 'msg': next(iter(error.detail.values()))[0].title() }) # 3、数据入库 # book = BookInfo.objects.create(**dict_data) book = ser.save() # 4、返回响应 return http.JsonResponse(book, status=201)
def post(self, request): # 1、获取参数 data_dict = request.data # 2、创建序列化器 ser = BookInfoSerializer(data=data_dict) # 3、校验、数据入库 ser.is_valid(raise_exception=True) ser.save() # 4、返回响应 return Response(ser.data, status=status.HTTP_201_CREATED)
def serializer(request): # 查询出模型对象 # book = BookInfo.query.get(pk=1) booklist = BookInfo.query.all() # 将模型对象交给序列化器 s = BookInfoSerializer(booklist, many=True) # hero = HeroInfo.query.get(pk=1) # # s = HeroInfoSerializer(hero) # 从序列化器的data属性中, 就能够获取挑选完成字段的数据 print(s.data) # 需要将数据变成json字符串返回给前端. 用到了DRF里面的Response, 后面会讲到 return HttpResponse("序列化成功! %s" % s.data)
def list(self, request): books = BookInfo.objects.all() serializer = BookInfoSerializer(books, many=True) return Response(serializer.data)
def retrieve(self, request, book_id=None): book = self.get_object() serializer = BookInfoSerializer(book) return Response(serializer.data)
def retrieve(self, request, book_id=None): queryset = BookInfo.objects.all() book = get_object_or_404(queryset, pk=book_id) serializer = BookInfoSerializer(book) return Response(serializer.data)
def list(self, request): queryset = BookInfo.objects.all() serializer = BookInfoSerializer(queryset, many=True) return Response(serializer.data)
if __name__ == '__main__': # 获取一本书 book = BookInfo.objects.get(id=9) # 准备数据 req_data = { 'btitle': 'django_rest', 'bpub_date': '2019-06-01', 'bread': 21, 'bcomment': 20 } # 创建序列化器对象 serializer = BookInfoSerializer(book, data=req_data) # 数据校验 serializer.is_valid() # 数据保存:此处save会调用序列化器类中的create方法 serializer.save() # 获取create方法返回的对象序列化之后的数据 res = serializer.data res = json.dumps(res, indent=1, ensure_ascii=False) print(res) # # 查询获取图书对象 # book = BookInfo.objects.all() #
响应数据 JSON """ from django.views.generic import View from django.http.response import JsonResponse, HttpResponse import json from rest_framework.viewsets import ModelViewSet from .models import BookInfo from booktest.serializers import BookInfoModelSerializer from booktest.serializers import BookInfoSerializer, HeroInfoSerializer from booktest.models import BookInfo, HeroInfo """序列化单个模型对象""" # 获取模型数据 # 创建序列化器并完成序列化 # shell 启动 测试 book = BookInfo.objects.get(id=1) serializer = BookInfoSerializer(book) serializer.data # {'id': 1, 'btitle': '射雕英雄传0', 'bpub_date': '1980-05-01', 'bread': 12, 'bcomment': 34, 'image': None} """序列化多个模型对象""" # book = BookInfo.objects.all() # serializer = BookInfoSerializer(instance=book, many=True) # serializer.data # ======================== # 关联对象嵌套序列化!! hero = HeroInfo.objects.get(id=1) serializer_hero = HeroInfoSerializer(instance=hero) serializer_hero.data """反序列化""" # 新建 data = { 'btitle': 'django三国演义',
# -------------------------------------------------------------- # 2021.1.4作业1:序列化 # goods = Goods(name="华为", price=4900, stock=1000) # serializer = GoodsSerializer(instance=goods) # res = serializer.data # res = json.dumps(res, indent=1, ensure_ascii=False) # print(res) # 2021.1.4作业2:反序列化 # req_data = {'name': '小米10', 'price': 4300} # serializer = GoodsSerializer(data=req_data) # res = serializer.is_valid() # if res: # print("校验通过:", serializer.validated_data) # else: # print("校验失败:", serializer.errors) # -------------------------------------------------------------- # 5.嵌套序列化:序列化id为27的令狐冲英雄数据 # hero = HeroInfo.objects.get(id=27) # serializer = HeroInfoSerializer(instance=hero) # res = serializer.data # res = json.dumps(res, indent=1, ensure_ascii=False) # print(res) # -------------------------------------------------------------- # 6.嵌套序列化:序列化id为3的图书数据 book = BookInfo.objects.get(id=3) serializer = BookInfoSerializer(book) res = serializer.data res = json.dumps(res, indent=1, ensure_ascii=False) print(res)
import os if not os.environ.get('DJANGO_SETTINGS_MODULE'): os.environ.setdefault("DJANGO_SETTINGS_MODULE", "drf.settings") # 让Django环境进行一次初始化 import django django.setup() import json from booktest.models import BookInfo,HeroInfo from booktest.serializers import HeroInfoSerializer,BookInfoSerializer if __name__ == "__main__": # 获取id为1的图书 book = BookInfo.objects.get(id=1) # 准备数据 data = {'btitle': '射雕英雄传-2', 'bpub_date': '2000-01-01'} # 创建序列化器对象 serializer = BookInfoSerializer(book, data=data) # 反序列化-数据校验 res = serializer.is_valid() print(res) # 反序列化-数据保存(调用序列化器类中update) serializer.save() # 获取更新对象序列化之后的数据 print(serializer.data)
""" 1、序列化器,序列化单个书籍对象 """ from booktest.serializers import BookInfoSerializer from booktest.models import BookInfo # 1、获取书籍对象 book = BookInfo.objects.get(pk=2) # 2、创建序列化器, instance表示序列化的对象 serializer = BookInfoSerializer(instance=book) # 3、转换数据 print(serializer.data) """ 2、序列化列表对象 """ from booktest.serializers import BookInfoSerializer from booktest.models import BookInfo # 1、获取书籍对象列表 books = BookInfo.objects.all() # 2、创建序列化器, instance表示序列化的对象 serializer = BookInfoSerializer(instance=books, many=True) # 3、转换数据 print(serializer.data) """ 结果: [ OrderedDict([('id', 2), ('btitle', '平凡的世界'), ('bpub_date', '1980-05-01T00:00:00Z'), ('bread', 200), ('bcomment', 10), ('is_delete', False)]), OrderedDict([('id', 3), ('btitle', '平凡的世界'), ('bpub_date', '1980-05-01T00:00:00Z'), ('bread', 20), ('bcomment', 10),'is_delete', False)]), OrderedDict([('id', 4), ('btitle', '白鹿原'), ('bpub_date', '2021-01-17T22:24:00Z'), ('bread', 0), ('bcomment', 0), ('is_delete', False)]) ] """