IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 13 反序列化之保存和局部校验全局校验 -> 正文阅读

[Python知识库]13 反序列化之保存和局部校验全局校验

序列化类的字段类型

记不住, 有很多,不需要都记住
只需要记住:CharField,IntegerField,DateField。。
在这里插入图片描述
在这里插入图片描述
View.py中

class BookView(APIView):


    def get(self, request, pk):
        response_msg = {'code': 1000, 'msg': '成功'}
        book = models.Book.objects.filter(id=pk).first()
        # book = models.Book.objects.filter(id=pk).first()
        # 用一个类,毫无疑问,一定要实例化
        book_ser = BookSerializer(book)
        # book_ser.data   序列化对象.data就是序列化后的字典
        response_msg['data'] = book_ser.data
        return Response(response_msg)

在这里插入图片描述
View.py中

 def get(self, request, pk):
        response_msg = {'code': 1000, 'msg': '成功'}
        book = models.Book.objects.filter(id=pk).first()
        # book = models.Book.objects.filter(id=pk).first()
        # 用一个类,毫无疑问,一定要实例化
        book_ser = BookSerializer(book)
        # book_ser.data   序列化对象.data就是序列化后的字典
        response_msg['data'] = book_ser.data
        return Response(response_msg)

    def put(self, request, pk):
        response_msg = {'code': 1000, 'msg': '成功'}
        book = models.Book.objects.filter(id=pk).first()
        # 得到序列化对象
        book_ser = BookSerializer(book, request.data)
        # 验证数据
        if book_ser.is_valid():
            book_ser.save()

            response_msg['data'] = book_ser.data
            return Response(response_msg)
        else:
            response_msg['code'] = 1001
            response_msg['msg'] = '数据校验失败'
            response_msg['data'] = book_ser.errors

这里put方法会报错,因为必须重写父类的update方法
在这里插入图片描述

class BookSerializer(serializers.Serializer):
    id = serializers.CharField()
    name = serializers.CharField()
    # price=serializers.DecimalField() 这里时间可以写出 文本,通过json转换
    price = serializers.CharField()
    author = serializers.CharField()
    publish = serializers.CharField()

    def update(self, instance, validated_data):
        instance.name = validated_data.get('name')
        instance.price = validated_data.get('price')
        instance.author = validated_data.get('author')
        instance.publish = validated_data.get('publish')
        instance.save()
        return instance

在这里插入图片描述

序列化字段选项

是里边参数
class BookSerializer(serializers.Serializer):
    id = serializers.CharField(max_length=8)

序列化组件修改数据

1 写一个序列化的类,继承Serializer
2 在类中写要反序列化的字段,想反序列化哪个字段,就在类中写哪个字段,字段的属性(max_lenth......)
	max_length	最大长度
    min_lenght	最小长度
    allow_blank	是否允许为空
    trim_whitespace	是否截断空白字符
    max_value	最小值
    min_value	最大值
3 在视图类中使用,导入--》实例化得到序列化类的对象,把要要修改的对象传入,修改的数据传入
	boo_ser=BookSerializer(book,request.data)
    boo_ser=BookSerializer(instance=book,data=request.data)
4 数据校验 if boo_ser.is_valid()
5 如果校验通过,就保存
	boo_ser.save()  # 注意不是book.save()
6 如果不通过,逻辑自己写


7 如果字段的校验规则不够,可以写钩子函数(局部和全局)
		# 局部钩子
		# validate_字段名  是针对的字段名
	    def validate_price(self, data):   # validate_字段名  接收一个参数
            #如果价格小于10,就校验不通过
            # print(type(data))
            # print(data)
            if float(data)>10:
                return data
            else:
                #校验失败,抛异常
                raise ValidationError('价格太低')
         # 全局钩子
        	def validate(self, validate_data):   # 全局钩子
                print(validate_data)
                author=validate_data.get('author')
                publish=validate_data.get('publish')
                if author == publish:
                    raise ValidationError('作者名字跟出版社一样')
                else:
                    return validate_data
8 可以使用字段的author=serializers.CharField(validators=[check_author]) ,来校验
	-写一个函数
    	def check_author(data):
            if data.startswith('sb'):
                raise ValidationError('作者名字不能以sb开头')
            else:
                return data
     -配置:validators=[check_author]
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-18 17:21:19  更:2021-10-18 17:22:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:10:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码