class StudentView2(View):
    def get2(self, request):
        """序列化单条数据"""
        student = Student.objects.first()
        serializer = stuModelSerilizer(instance=student)
        print(serializer.data)
        return JsonResponse(serializer.data)
    def get3(self, request):
        """序列化多条数据"""
        student_list = Student.objects.all()
        serializer = stuModelSerilizer(instance=student_list, many=True)
        print(serializer.data)
        return JsonResponse(serializer.data, safe=False)
    def get4(self, request):
        """反序列化验证数据,添加操作"""
        # 模拟用户传来的数据
        params = {
            "name": "桑德",
            "age": 20,
            "sex": 0,
            "class_null": "a102",
            "description": "难得先纷",
        }
        serializer = stuModelSerilizer(data=params)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return JsonResponse(serializer.data)
    def get(self, request):
        """反序列化验证数据,更新操作"""
        # 模拟用户传来的数据
        pk = 6
        params = {
            "name": "里昂",
            "age": 22,
            "sex": 1,
            "class_null": "a104",
            "description": "无妄站灭",
            "user":"root",
        }
        student = Student.objects.get(pk=pk)
        serializer = stuModelSerilizer(instance=student, data=params)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return JsonResponse(serializer.data)
# 模型类序列化器
class stuModelSerilizer(serializers.ModelSerializer):
    """学生模型类序列化器"""
    # 1.声明要转换的字段(不是模型类的字段手动添加)
    user = serializers.CharField()
    # 2.模型类信息
    class Meta:
        model = Student
        fields = "__all__"  # 全字段
        # exclude=[]#不需要的字段
        # fields=[]#需要的字段
    # 字段补充声明(以此类推)
  
  
#批量指定只读字段,不需要用户上传,服务端直接返回
read_only_fields = []
    # max_length等验证字段必须是序列化器的选项参数
    extra_kwargs = {
        "name": {
            "error_messages": {
                "max_length": "对不起,名字最长只能为20个字",
            },
            "age": {
                "min_value": 0,
                "max_value": 100,
                "error_message": {
                    "min_value": "年龄不能为0或者负数",
                    "max_value": "年龄超过100不能使用本产品",
                }
            }
        }
    }
    # 非数据库模型的字段验证,注意不保存到数据库应该raise,一旦return就会报错
    def validate_user(self, data):
        if data != "root":
            raise serializers.ValidationError(
                code="user",
                detail="只有root用户才可以执行此操作",
            )