You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写ApiView校验用户验证码并更新User模型的is_verified状态

邮箱验证码校验ApiView实现方案

基于你提供的User模型,我们可以用Django REST Framework的APIView实现验证码校验接口,核心逻辑是接收用户的邮箱(或用户名)与输入的验证码,比对数据库中存储的verification_code,一致则将用户的is_verified设为True。

1. 编写请求参数序列化器

先定义一个序列化器,用来验证前端传来的参数格式是否合法:

from rest_framework import serializers

class VerifyCodeSerializer(serializers.Serializer):
    email = serializers.EmailField(required=True)
    verification_code = serializers.CharField(required=True, max_length=30)

2. 实现核心校验视图

编写继承自APIView的视图类,在post方法中处理验证码校验逻辑:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import User

class VerifyEmailAPIView(APIView):
    def post(self, request):
        serializer = VerifyCodeSerializer(data=request.data)
        # 验证请求参数合法性
        if not serializer.is_valid():
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        
        email = serializer.validated_data['email']
        input_code = serializer.validated_data['verification_code']
        
        try:
            # 通过邮箱定位用户
            user = User.objects.get(email=email)
        except User.DoesNotExist:
            return Response({"error": "该邮箱未注册"}, status=status.HTTP_404_NOT_FOUND)
        
        # 比对验证码
        if user.verification_code == input_code:
            # 标记用户为已验证
            user.is_verified = True
            # 可选:验证成功后清空验证码,避免重复利用
            user.verification_code = ""
            user.save()
            return Response({"message": "验证成功"}, status=status.HTTP_200_OK)
        else:
            return Response({"error": "验证码错误"}, status=status.HTTP_400_BAD_REQUEST)

3. 配置路由

在项目的urls.py中添加对应路由,让接口可以被访问:

from django.urls import path
from .views import VerifyEmailAPIView

urlpatterns = [
    # 其他路由...
    path('verify-email/', VerifyEmailAPIView.as_view(), name='verify-email'),
]

额外建议

  • 如果需要基于用户名校验,只需把序列化器的email字段改成username,视图中查找用户的条件改为User.objects.get(username=username)。
  • 建议给验证码添加过期机制:在User模型中新增verification_code_expire字段(DateTimeField类型),校验时同时判断当前时间是否超过过期时间,提升安全性。
  • 验证成功后清空验证码是最佳实践,防止同一验证码被多次使用。

内容的提问来源于stack exchange,提问作者Kirill_N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:47:26