django序列化drf2
tppAPI实例
https://gitee.com/zhanzhaoxiang/tppAPI.git
user/serializers.py
import re
from datetime import datetime, timedeltafrom rest_framework import serializers
from rest_framework.validators import UniqueValidatorfrom user.models import User, VerifyCodeclass SmsSerializer(serializers.Serializer):phone = serializers.CharField(required=True, max_length=11, min_length=11, error_messages={'max_length': '手机号11位','min_length': '手机号11位',})def validate_phone(self, phone):# 验证手机号有没有注册过if User.objects.filter(phone=phone).exists():raise serializers.ValidationError('此手机号已注册')if not re.match(r'1\d{10}', phone):raise serializers.ValidationError('手机号格式错误')return phoneclass RegisterSerializer(serializers.ModelSerializer):code = serializers.CharField(required=True, max_length=4, min_length=4, error_messages={'required': '必需输入验证码','max_length': '验证码4位','min_length': '验证码4位'}, write_only=True)# 用户名验证方法一种username = serializers.CharField(required=True, allow_blank=False,validators=[UniqueValidator(queryset=User.objects.all(), message='此用户名已被占用')])repassword = serializers.CharField(write_only=True, style={'input_type': 'password'})class Meta:model = Userfields = ['username', 'password', 'repassword', 'phone', 'code']def validate_code(self, code):# 验证码确认verifycodes = VerifyCode.objects.filter(phone=self.initial_data['phone']).order_by('update_time')if verifycodes:verifycode = verifycodes.first()# 设置一个过期时间,现在的时间减去有效时间time_delta = datetime.now() - timedelta(minutes=10)if time_delta > verifycode.update_time:raise serializers.ValidationError('验证码过期,请重新发送')if verifycode.code != code:raise serializers.ValidationError('验证码错误')else:raise serializers.ValidationError('请发送验证码')return codedef validate(self, attrs):# 验证两次密码是否一致if attrs['password'] != attrs['repassword']:raise serializers.ValidationError('密码不一致')# 确认密码和验证码不放入数据库,先删掉再创建用户del attrs['repassword']del attrs['code']return attrs# def validate_username(self, username):# # 验证用户名是否重复的一种方法# if User.objects.filter(username=username).exists():# raise serializers.ValidationError('此用户名已注册')# return usernameclass UserSerializer(serializers.ModelSerializer):class Meta:model = Userfields = ['username', 'password', 'phone']
user/view.py
from django.contrib.auth.hashers import make_password
from django.shortcuts import render# Create your views here.
from rest_framework.authentication import BasicAuthentication, SessionAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import CreateModelMixin, UpdateModelMixin, RetrieveModelMixin
from rest_framework_simplejwt.authentication import JWTAuthenticationfrom user.models import VerifyCode, User
from user.serializers import SmsSerializer, RegisterSerializer, UserSerializer
from utils.send_sms import send_smsclass SmsViewSet(CreateModelMixin, GenericViewSet):serializer_class = SmsSerializerdef create(self, request, *args, **kwargs):# 获取手机号serializer = self.get_serializer(data=request.data)serializer.is_valid(raise_exception=True)phone = serializer.validated_data['phone']# 发送验证码json = send_sms(phone)if json.get('code') == 200:# 保存到数据库vc = VerifyCode.objects.create(phone=phone, code=json.get('obj'))if vc:return Response(serializer.data, status=200)else:return Response({'msg': '验证码发送失败', 'status': json.get('obj')}, status=200)class UserViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, GenericViewSet):"""实现用户注册,登录,更新"""queryset = User.objects.all()# serializer_class = RegisterSerializer# 局部添加定制身份权限认证# 设置需要身份验证的类authentication_classes = [BasicAuthentication, SessionAuthentication, JWTAuthentication]# # 全类权限认证# permission_classes = [IsAuthenticated,]def get_permissions(self):# 定制类内方法权限认证if self.action == 'create':return []else:return [IsAuthenticated(),]def get_serializer_class(self):# 根据不同的动作调用不同的序列化类if self.action == 'retrieve':# 登录return UserSerializerelif self.action == 'create':# 注册return RegisterSerializerreturn UserSerializer# 注册def create(self, request, *args, **kwargs):serializer = self.get_serializer(data=request.data)serializer.is_valid(raise_exception=True)# 加密password = make_password(serializer.validated_data['password'])serializer.validated_data['password'] = passwordself.perform_create(serializer)headers = self.get_success_headers(serializer.data)from rest_framework import statusreturn Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)def perform_create(self, serializer):serializer.save()
django序列化drf2相关推荐
- django序列化器嵌套_Django Rest Framework中用于OneToOne字段的序列化程序中的嵌套关系
django序列化器嵌套 The Django Rest Framework (DRF) is one of the effectively written frameworks around Dja ...
- Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)
12.4 Cookie和Session 12.41 cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...
- Django 序列化三种方式 对象 列表 元组
1.xuliehua.html <html lang="en"> <head><meta charset="UTF-8">& ...
- Django:序列化的几种方法
前言 关于序列化操作,就是将一个可迭代的数据结构,通过便利的方式进行我们所需要的操作. 今天历来归纳一下,Django中的几种不同得分方法,已经Django-restframework提供的方法 创建 ...
- django 不包括字段 序列化器_手写一个Django序列化功能
本文章的代码已上传至github上(github包含了更多功能,相关文章后续更新) AGL1994/django-buildinggithub.com 前言 目前Django比较知名的序列化框架有D ...
- Django——序列化与反序列化
目录 Serializer类 序列化 反序列化 模型类序列化器BookModelSerializer Serializer类 1.定义: Django REST framework中的Serializ ...
- Django 序列化和反序列化(九)
一.什么是序列化和反序列化? 将程序中的一个数据结构类型转换为其他格式(字典.JSON.XML等),例如将Django中的模型类对象装换为JSON字符串,这个转换过程我们称为序列化. 反之,将其他格式 ...
- Django层级模型定义及序列化嵌套的方法
----------Django==2.0.2----------- 一.Django层级模型的定义 实例:(商品模型) class GoodsCategory(models.Model):" ...
- Django REST framework 1
Django REST framework Django REST framework官方文档:点击 中文文档:点击 安装djangorestframework:pip3 install djang ...
最新文章
- sqlnet.ora限制导致双机应用资源启动失败
- 免费版最好用功能强大方便快捷的计算器Calculator#出炉~
- java floatmath_《Java1.doc
- 用树莓派+lora shield搭建一个LoRaWAN网关
- 精通ASP.NET MVC ——URL和Ajax辅助器方法
- Cortex-M3异常中断及向量表定义
- 802.11协议常用语缩写
- c标签判断true false jsp_JSP 标准标签库(JSTL) | 菜鸟教程
- 国内开源镜像(下载Linux系统)
- 怎么压缩PPT大小?PPT太大了怎么压缩?
- C#Form窗体模仿PhotoShop软件,高仿真原PS界面,实现PS对图片基本操作、拍照等,计算机图形学相关
- 武职计算机网络技术专业,武汉职业技术学院计算机系
- CSS浮动+背景图片+边框+文字排版+段落设置
- [1061]青蛙的约会
- 手机录制连续点赞并周期执行(免代码)
- 如何写好一个产品需求文档PRD
- 给图像增加一种噪声,构造并利用至少两种高通滤波器实现频率域的滤波
- 腾讯 Robotics X 轮腿式机器人
- java逻辑共享设计_精美图文讲解Java AQS 共享式获取同步状态以及Semaphore的应用...
- 从程序员到项目经理:认识项目经理
热门文章
- java 求正割_Java 反射机制详解
- C#“Multiple assemblies with equivalent identity have been imported”错误
- 小米手机小技巧:小米手机心率测试
- 3D旋转相册炫酷js特效
- java 导入excel 日期格式转换
- 实战项目——智能农业沙盘
- 华为v5服务器安装2012系统,裸金属服务器安装v5
- 前端项目怎样合理使用模块化和闭包?
- java imageio 使用_java – 使用ImageIO发送图像流?
- c语言定时器定时1ms程序,STM32 Cubemx 配置定时器定时1mS