DRF如何使用serializer进行验证数据
以发送短信,用户传过来的手机号进行验证举例,
serializer对前端传过来的参数进行验证
路由:
from rest_framework.routers import DefaultRouter
from user.views import SmsCodeViewSet
router=DefaultRouter()
#发送短信验证码
router.register('code',SmsCodeViewSet,basename='code')urlpatterns = [path('xadmin/', xadmin.site.urls),url('^ueditor/', include('DjangoUeditor.urls')),# 图片相关展示url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),url('^', include(router.urls)),# restframework配置url('^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
view视图:
class SmsCodeViewSet(CreateModelMixin,viewsets.GenericViewSet):"""发送手机短信验证码"""serializer_class = SmsSerializer#生成验证码code="%04d" % random.randint(0, 10000)def create(self, request, *args, **kwargs):serializer=self.get_serializer(data=request.data)# 如果数据无效就返回400状态码(请求参数错误)serializer.is_valid(raise_exception=True)mobile=serializer.validated_data["mobile"]api_key="发送短信的api_key"#实例化发送短信类yun_pian=YunPian(api_key=api_key)#调用发送短信函数sms_status=yun_pian.send_sms(code=self.code,mobile=mobile)if sms_status["code"]!=0:return Response({'mobile':sms_status["msg"]},status=status.HTTP_400_BAD_REQUEST)else:verify_code=VerifyCode(code=self.code,mobile=mobile)verify_code.save()return Response({"mobile":mobile},status=status.HTTP_201_CREATED)
serializer类:
from django.contrib.auth import get_user_model
User=get_user_model()class SmsSerializer(serializers.Serializer):mobile=serializers.CharField(max_length=11)def validate_mobile(self,mobile):"""验证手机号码:param data: :return: """# 手机是否注册if User.objects.filter(mobile=mobile).count():raise serializers.ValidationError("该用户已注册")# 验证手机号码是否合法if re.match(REGEX_MOBILE,mobile):raise serializers.ValidationError("手机号码非法")# 验证码发送频率one_minits_ago=datetime.now()-timedelta(hours=0,minutes=1,seconds=0)if VerifyCode.objects.filter(add_time__gt=one_minits_ago,mobile=mobile).count():raise serializers.ValidationError("验证码发送太过于频繁,请稍后再试!")return mobile
DRF如何使用serializer进行验证数据相关推荐
- DRF数据验证+数据存储
1.验证数据的自定义类 class BooksDRFt(serializers.ModelSerializer):class Meta:model = Bookfields = '__all__'#要 ...
- drf序列化器-Serializer
Python之drf序列化器-Serializer 一.序列化器-Serializer的作用 序列化,序列化器会将模型类对象转化为字典,经过Response变成json字符串 反序列化,把客户发送过来 ...
- 快速上手Django(六) -Django之Django drf 序列化器Serializer类
文章目录 快速上手Django(六) -Django之Django drf 序列化器Serializer类 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSeria ...
- 交叉验证分析每一折(fold of Kfold)验证数据的评估指标并绘制综合ROC曲线
交叉验证分析每一折(fold of Kfold)验证数据的评估指标并绘制综合ROC曲线 Receiver Operating Characteristic (ROC) with cross valid ...
- python 数据逐个验证_在python中验证数据的最佳方法是什么?
我是Python的新手,我试图找到验证数据的最佳方法.在 我有一个"well"类型的对象,它具有其他对象的属性.也可以通过XML文件来获取数据.下面是一个例子.在class Wel ...
- tableau必知必会之运用本福德定律(Benford‘s law)验证数据真实性
本福德定律 本福德定律(本福德法则 Benford's law ),也称为本福德法则,说明一堆从实际生活得出的数据中,以1为首位数字的数的出现机率约为总数的三成,接近期望值 1/9 的 3 倍.而越大 ...
- STRUTS2.X之使用validate方法验证数据
在Struts2中最简单的验证数据的方法是使用validate.我们从 ActionSupport类的源代码中可以看到,ActionSupport类实现了一个Validateable接口.这个接口只有 ...
- System.Web.HttpException: 无法验证数据解决办法
无法验证数据. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Web.HttpExcep ...
- 机器学习的训练数据(Training Dataset)、测试数据(Testing Dataset)和验证数据(Validation Dataset)
三者的意义 - 训练数据:用来训练模型的数据 - 验证数据:用来检验模型准确率 - 测试数据:再一次确认验证数据集中的模型是好的模型. 一般步骤: 测试数据集和验证数据的数据一定不能用来训练,否则会出 ...
- 使用JSON-Schema验证数据,第1部分
处理复杂的结构化数据时,需要确定数据是否有效. JSON-Schema是JSON文档的标准,描述了JSON数据的结构和要求. 在这个由两部分组成的系列文章中,您将学习如何使用JSON-Schema来验 ...
最新文章
- 命令行下执行带参数php
- InfoPath表单每增加一个表单产生一个自动增加ID序号
- CodeForces - 993C Careful Maneuvering(几何+暴力+状态压缩)
- 2018/7/13-纪中某C组题【jzoj3382,jzoj3383,jzoj3384,jzoj3385】
- spring boot注释_Spring Boot中的@SpringBootConfiguration注释
- 在服务器上搭建基于yolo3 与crnn 实现中文自然场景文字检测及识别,GPU版本
- windows mysql 备份_Windows下MySQL数据库备份脚本(二) | 系统运维
- 主进程中发生javascript错误_你知道 JavaScript 中的错误对象有哪些类型吗?
- 【数学】Birthday
- C# Socket 简易的图片传输
- 跳一跳外挂的python实现--OpenCV步步精深
- 演练nerddinner 问题
- python one class svm_sklearn例程:OneClassSVM物种分布建模
- 线性表_使用栈实现二进制转换到八进制/十进制/十六进制
- Linux操作系统知识点总结
- C#日历控件(MonthCalendar)
- Photoshop(4)做海报的心得
- 微软开源!世界首个AI量化投资平台 Qlib 基本使用教程
- 汇编中的jmp转移指令:jmp short、jmp near ptr、jmp far ptr
- “王者荣耀”与大数据平台的产品化思想
热门文章
- Proteus一体化安装STC15库添加
- Rider+EmmyLua lua代码高亮设置
- 用摄动法证明fibs的一个公式(继续变形)
- 论文记载:FRAP:Learning Phase Competition for Traffic Signal Control
- html5在线画图工具,HTML5 Canvas画板画图工具 可定义笔刷和画布
- 三个精致的钢琴音源 Native Instruments Definitive Piano Collection
- android 按钮救星,按键救星下载-按键救星专业版(Button Savior Pro) 安卓版v2.1.1-PC6安卓网...
- 浏览器之硬件加速机制
- 二维傅里叶变换简化方式
- 微软私有云的数据保护之神——DPM