首页 > 其他分享 >drf序列化用APIView写编写5个接口并校验数据

drf序列化用APIView写编写5个接口并校验数据

时间:2024-04-17 22:11:54浏览次数:18  
标签:return name APIView request pk 序列化 data serializer drf

  • 步骤:
    • 写一个类,继承Serialier
    • 在类中写字段,字段就是要序列化的字段
    • 在视图函数中,序列化类,实例化得到对象,传入该传的参数
    • 调用序列化类对象的 serializer.data 方法完成序列化

【一】写序列化类

  • serializer.py
from rest_framework import serializers
from rest_framework.exceptions import ValidationError


class BookSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=8, min_length=3)
    price = serializers.IntegerField(max_value=100, min_value=10)

    # 局部钩子
    def validate_name(self, name):
        if name.startswith('sb'):
            raise ValidationError('书名不能以sb开头')
        else:
            return name

    # 全局钩子
    def validate(self, attrs):
        # attrs是字典
        name = attrs.get('name')
        price = attrs.get('price')
        if name.startswith('sb') and price > 50:
            raise ValidationError('书名不能以sb开头,价格不能超过50')
        else:
            return attrs


【二】后端

from .serializer import BookSerializer
from rest_framework.response import Response
class BookView(APIView):
    def get(self, request):
        obj_list = Book.objects.all()
        # 多条数据many=True
        serializer = BookSerializer(instance=obj_list,many=True)
        return Response({'code': 100, 'msg': "查询成功", 'results': serializer.data})
    # 增加
    def post(self, request):
        # 校验数据
        serializer=BookSerializer(data=request.data)
        if serializer.is_valid():
            # Book.objects.create(name=request.data.get('name'), price=request.data.get('price'))
            return Response({'code': 100, 'msg': "保存成功"})
        else:
            return Response({'code': 101, 'msg':"保存失败", 'results': serializer.errors})


class BookDetailView(APIView):
    def get(self, request, pk):
        obj = Book.objects.filter(pk=pk).first()
        serializer = BookSerializer(instance=obj)
        return Response({'code': 100, 'msg': "查询成功", 'results':serializer.data})

    # 修改
    def put(self, request, pk):
        Book.objects.filter(pk=pk).update(name=request.data.get('name'), price=request.data.get('price'))
        return JsonResponse({'code': 100, 'msg': "修改成功"})

    def delete(self, request, pk):
        obj = Book.objects.filter(pk=int(pk)).delete()
        return JsonResponse({'code': 100, 'msg': "删除成功"})

【三】测试

image-20240411194115343

【四】校验

image-20240411200936024

标签:return,name,APIView,request,pk,序列化,data,serializer,drf
From: https://www.cnblogs.com/banchengyanyu/p/18141902

相关文章

  • 【python之DRF学习】三大方法之认证
    title:【python之DRF学习】三大方法之认证date:2024-04-1721:00:56星期三updated:2024-04-1721:01:00星期三description:cover:内置三大方法:drf之APIView内部的必须会经过的三大认证/方法:认证、权限、频率一、认证组件1、简介登录认证的限制​认证组件......
  • drf之认证、权限、频率控制、排序、过滤、分页
    【认证】models.py1fromdjango.dbimportmodels234#Createyourmodelshere.5classUser(models.Model):6username=models.CharField(max_length=50)7password=models.CharField(max_length=50)8user_type=models.IntegerFiel......
  • fastjson 1.2.24 反序列化导致任意命令执行漏洞复现
    前置知识今天复现了常见的fastjson反序列化漏洞,了解该漏洞需要一些前置的知识,这里总结一下:Fastjsonfastjson是一个Java的库,可以将Java对象转换为Json字符串,也可以将Json字符串转换为Java对象,Fastjson也可以操作一些Java中的对象。JNDIJNDI(JavaNamingandDirectoryInterf......
  • 3小时搞定DRF框架 | Django REST framework前后端分离框架实践
    DRF(全称DjangoRESTframework)是一个用于构建WebAPI的强力工具集,是一个基于Django的PythonWeb框架,它为开发人员提供了一套快速开发RESTfulAPI的工具,它能够自动化API可视化、文档化,实现接口的自动化测试以及自动化的API路由、序列化、视图、验证、分页、版本管理、认证等......
  • C3P0反序列化链分析
    前言C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。使用它的开源项目有Hibernate、Spring等。之前有接触到过,但是没有深入了解,像之前学二次反序列化时,WrapperConnectionPoolDataSource就是C3P0的环境搭建<dependency><groupId>com.......
  • DRF之序列化类介绍及使用
    一、序列化类1、介绍序列化组件在DRF中扮演着重要的角色,帮助开发者轻松地定义数据的序列化和反序列化过程,同时提供了数据验证、字段定义、嵌套序列化等功能。通过使用序列化组件,您可以更好地控制API的数据输入和输出,确保数据的有效性和一致性。serializers.Serializer是基......
  • 2、APIView执行流程以及request对象源码分析
    一、基于View编写5个接口1、创建模型表models.pyfromdjango.dbimportmodelsclassBook(models.Model):name=models.CharField(max_length=64)price=models.IntegerField()publish=models.CharField(max_length=32)2、视图函数views.pyfrom......
  • Kryo反序列化链分析
    前言Kryo是一个快速序列化/反序列化工具,依赖于字节码生成机制(底层使用了ASM库),因此在序列化速度上有一定的优势,但正因如此,其使用也只能限制在基于JVM的语言上。Kryo序列化出的结果,是其自定义的,独有的一种格式。由于其序列化出的结果是二进制的,也即byte[],因此像redis这样可以存......
  • 如何使用groovy反序列化json
    使用Groovy反序列化JSON可以通过以下步骤实现:导入相关的Groovy库:在Groovy脚本或Groovy项目中,首先需要导入相关的Groovy库,以便使用JSON反序列化的功能。可以使用以下代码导入库:importgroovy.json.JsonSlurper复制创建JsonSlurper对象:JsonSlurper是Groovy提供的一个用于解......
  • drf中常用的字段及用法
    【序列化常见字段】  其实就是嵌套,字典中对象嵌套字典,就用DictField,对象套列表用ListField【序列化常见字段参数】validators :该字段使用的验证器--》字段自己的校验[1max_lenght2validators],局部钩子,全局钩子 name=serializer.CharField(validators=[valida_na......