carbo_server/apps/auth1/email_code_view.py

53 lines
1.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from rest_framework.generics import CreateAPIView
from rest_framework.response import Response
from rest_framework.exceptions import ParseError
from apps.auth1.serializers import EmailCodeSerializer
from django.core.cache import cache
from apps.utils.tools import rannum
from server.settings import get_sysconfig
class EmailCodeView(CreateAPIView):
"""发送邮箱验证码
发送邮箱验证码用于注册
"""
authentication_classes = []
permission_classes = []
serializer_class = EmailCodeSerializer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
vdata = serializer.validated_data
email = vdata.get('email')
cache_key = f'email_code_{email}'
# 生成6位验证码
code = rannum(6)
print(code)
# 缓存验证码有效期5分钟
cache.set(cache_key, code, 60 * 5)
# 使用 MyThread 发送验证码邮件
from django.core.mail import send_mail
from apps.utils.thread import MyThread
def send_email():
config = get_sysconfig()
base_name_short = config['base']['base_name_short']
send_mail(
subject=f'{base_name_short}-验证码',
message=f'您的验证码是:{code}5分钟内有效。如非本人操作请忽略此邮件。',
from_email=None, # 使用默认发件人
recipient_list=[email],
fail_silently=False
)
thread = MyThread(target=send_email)
thread.start_p()
return Response({'ok_msg': '验证码已发送'})