drf的钩子函数

1、新建django项目、注册drf、设置国际化、配置数据库(修改数据库操作模块)、自定义Model类(设置文件类型字段和选项字段)、配置media及开放media资源接口
2、继承Serializer类的基础序列化类,可以将对象序列化成前台所需数据
3、继承Serializer类的基础反序列化类,可以指定一系列前台提供的数据的校验规则,确保数据安全
	class BookSerializer(serializers.Serializer):
		name = serializers.CharField(min_length=3, max_length=10)
		
		# 自定义序列化字段
		my_name = serializers.SerializerMethodField()
		def get_my_name(self, obj):
			return 'my_name的值,一般与obj有关系'
			
		# 自定义反序列化字段
		re_name = serializers.CharField(min_length=3, max_length=10)
		
		# required | write_only | read_only
		# 局部钩子
		def validate_name(self, value):
			if 'g' in name:
				raise serializers.ValidationError('名字异常')
			return value
		# 全局钩子
		def validate_name(self, attrs):
			attrs.pop('re_name')
			# 失败抛异常,成功返回attrs
                        return attrs
		# 需求有增和改还需要重写create和update
		
		
		
	
4、重点掌握整合序列化与反序列为一体的继承ModelSerializer类的序列化类
	设置序列化与反序列化字段,并进行区分
	提供自定义序列化字段以及自定义反序列化字段
	设置系统校验规则、局部钩子校验规则与全局钩子校验规则
	class Book(models.Model):
		# 自定义序列化字段
		@property
		def my_name(self):
			return 'my_name的值,与Book类对象self有关'
		
	class BookModelSerializer(ModelSerializer):
		# 自定义反序列化字段,系统校验规则必须在声明中属性,在全局钩子移除
		re_name = serializers.CharField(min_length=3, max_length=10, write_only=True)
		class Meta:
			model = Book
			fields = ('name', 'price', 'my_name', 're_name')
			extra_kwargs = {
				# 系统校验
				'name': {
					'required': True
				}
			}
		# 局部全局钩子,和Serializer方式一样,且不用重写create和update方法
posted @ 2019-11-22 17:19  oxtime  阅读(505)  评论(0编辑  收藏  举报