• drf序列化器save操作创建


    https://www.bilibili.com/video/BV1z5411D7BQ?p=10&spm_id_from=pageDriver&vd_source=caabcbd2a759a67e2a3de8acbaaf08ea

    views.py

    from django.shortcuts import render
    
    # Create your views here.
    
    
    from rest_framework.views import APIView
    from sers.models import  Book
    from rest_framework import serializers
    from rest_framework.response import Response
    
    
    # 针对模型设计序列化器 ----查询数据库数据赋值到这个类然后扔出去
    # (我把数据转成json给前端发叫序列化)
    class BookSerializers(serializers.Serializer):
        id=serializers.IntegerField(read_only=True)#在客户端提交数据【反序列化阶段不会要求有id字段】 可以不传
        title = serializers.CharField(max_length=8)
        price = serializers.IntegerField(required=False)  #required=True=反序列化阶段非必填)
        # 左边date是给出去的字段,右边soure是具体数据模型对应取值的字段
        date = serializers.CharField(source="pub_date")
    
    # ======把操作独立出来意义在于解耦======== 当调用save()的时候源码create()方法是空的所以要重写
        def create(self, validated_data):
            # 添加数据逻辑
            return Book.objects.create(**self.validated_data)
    
    
    
    class BookView(APIView):
        def get(self,request):
            # 获取所有书籍
            book_list=Book.objects.all()
            #这步其实就是把把查出来的数据赋值到序列化模型里---单条数据不需要many属性
            serializer = BookSerializers(instance=book_list, many=True)
            # # # # 调用序列化对象的data获取序列化后的数据
            data = serializer.data
            return Response(data)
    
    
        def post(self,request):
            # 获取请求的数据 #request.data可以拿到表单或json的数据
            print("data",request.data)
            # 构建序列化器
            serializer = BookSerializers(data=request.data)
            # # 校验数据--返回boolen值,成功信息放到serializer.validated_data,错误信息放到serializer.errors
            if serializer.is_valid():
                # 数据插入到数据库中
                # save()写法插入数据-----------
                serializer.save()
    
                #数据校验通过
                return Response(f'校验成功信息:{serializer.validated_data}') #serializer.validated_data是反序列化成数据模型了
                # return Response(f'校验成功信息:{serializer.data}') #"校验成功信息:{'title': 'j11', 'price': 1999, 'date': '2020-12-12 00:00:00'}"
            else:
                # 数据校验失败
                return Response(f'校验失败信息:{serializer.errors}')
  • 相关阅读:
    验证授权【msdn】
    实战 Comet 应用程序开发
    ASP.NET Forms验证 实现子域名(SubDomain)共享登陆下的缺陷 [转]
    分享WordPress博客搜索引擎优化的六点经验 博客园 cnbogs
    支持支付宝(Alipay)付款的三个美国主机商
    认证,授权2
    登录代码,程序不是作文
    Google 的PageRank值对网站成功有多重要
    SQL Server 2005 Service Broker 初探 [摘抄]
    jQuerySelectors(选择器)的使用(四五、内容篇&可见性篇) cnblogs zhuan
  • 原文地址:https://www.cnblogs.com/kaibindirver/p/16803138.html
Copyright © 2020-2023  润新知