Ejemplo n.º 1
0
 def get(self, request, pk):
     # 1、通过pk获取对象
     book = BookInfo.objects.get(pk=pk)
     # 2、数据转换
     serializer = BookInfoSerializer(instance=book)
     # 3、返回响应
     return http.JsonResponse(serializer.data)
Ejemplo n.º 2
0
Archivo: views.py Proyecto: xdlgj/stu
 def get(self, request):
     # 1、查询所有的书籍
     books = BookInfo.objects.all()
     # 2、将对象列表转换为字典列表
     serializer = BookInfoSerializer(instance=books, many=True)
     # 3、返回响应
     return Response(serializer.data)
Ejemplo n.º 3
0
 def get(self, request):
     # 1、查询所有的书籍
     books = BookInfo.objects.all()
     # 2、数据转换
     serializer = BookInfoSerializer(instance=books, many=True)
     # 3、返回响应
     return http.JsonResponse(serializer.data, safe=False)
Ejemplo n.º 4
0
Archivo: views.py Proyecto: xdlgj/stu
 def get(self, request, book_id):
     # 1、查询书籍
     book = BookInfo.objects.get(id=book_id)
     # 2、将对象列表转换为字典列表
     serializer = BookInfoSerializer(instance=book)
     # 3、返回响应
     return Response(serializer.data)
Ejemplo n.º 5
0
Archivo: views.py Proyecto: xdlgj/stu
 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)
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
Archivo: views.py Proyecto: xdlgj/stu
 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)
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
 def list(self, request):
     books = BookInfo.objects.all()
     serializer = BookInfoSerializer(books, many=True)
     return Response(serializer.data)
Ejemplo n.º 12
0
Archivo: views.py Proyecto: xdlgj/stu
 def retrieve(self, request, book_id=None):
     book = self.get_object()
     serializer = BookInfoSerializer(book)
     return Response(serializer.data)
Ejemplo n.º 13
0
Archivo: views.py Proyecto: xdlgj/stu
 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)
Ejemplo n.º 14
0
Archivo: views.py Proyecto: xdlgj/stu
 def list(self, request):
     queryset = BookInfo.objects.all()
     serializer = BookInfoSerializer(queryset, many=True)
     return Response(serializer.data)
Ejemplo n.º 15
0

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()
    #
Ejemplo n.º 16
0
响应数据    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三国演义',
Ejemplo n.º 17
0
    # --------------------------------------------------------------
    # 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)
Ejemplo n.º 18
0
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)
Ejemplo n.º 19
0
"""
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)])
]
"""