This commit is contained in:
2026-04-05 16:50:12 +08:00
parent 7d2a072b7d
commit 579db5e918
47 changed files with 1853 additions and 71 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1,4 +1,4 @@
# Generated by Django 5.2.12 on 2026-03-25 21:58
# Generated by Django 5.2.12 on 2026-04-04 09:10
import django.contrib.auth.models
import django.contrib.auth.validators
@@ -0,0 +1,19 @@
# Generated by Django 5.2.12 on 2026-04-04 13:35
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('user', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='fuser',
name='isSetPassword',
field=models.BooleanField(blank=True, default=False, verbose_name='是否主动设置过密码'),
preserve_default=False,
),
]
Binary file not shown.
+1
View File
@@ -8,6 +8,7 @@ class FUser(AbstractUser):
phone_number = models.CharField(max_length=15, blank=True, verbose_name='手机号')
avatar = models.ImageField(upload_to='avatars/', blank=True, null=True, verbose_name='头像')
bio = models.TextField(max_length=500, blank=True, verbose_name='个人简介')
isSetPassword = models.BooleanField(blank=True, verbose_name='是否主动设置过密码')
# class Meta:
# # 定义在管理后台显示的名称
+6 -4
View File
@@ -6,11 +6,13 @@ from rest_framework_simplejwt.views import (
TokenVerifyView,
)
from .views.user import SendUserEmail
urlpatterns = [
# JWT 认证接口
path('user/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('user/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('user/token/verify/', TokenVerifyView.as_view(), name='token_verify'),
path('token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('token/verify/', TokenVerifyView.as_view(), name='token_verify'),
path('register_send/', SendUserEmail.as_view(), name='send_user_email'),
]
-15
View File
@@ -1,15 +0,0 @@
from django.urls import path, include
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
TokenVerifyView,
)
urlpatterns = [
# JWT 认证接口
path('user/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('user/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('user/token/verify/', TokenVerifyView.as_view(), name='token_verify'),
]
View File
Binary file not shown.
Binary file not shown.
+75
View File
@@ -0,0 +1,75 @@
from rest_framework.decorators import permission_classes
from rest_framework.parsers import MultiPartParser, FormParser
from rest_framework.permissions import AllowAny
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from django.core.mail import EmailMessage
import user.models
# import os
from utils import RandCode
from django.core.cache import caches
# 获取不同的缓存实例
default_cache = caches['default']
session_cache = caches['session']
celery_cache = caches['celery']
from ..models import FUser
class SendUserEmail(APIView):
permission_classes = [AllowAny]
def post(self, request):
to_email = request.data.get('to_email', None)
print(to_email)
if to_email is None:
return Response(status=status.HTTP_400_BAD_REQUEST)
subject = 'test邮件'
code = RandCode.get_digit_characters_code_8()
body = f"你的验证码为 {code}, 该验证码仅用于账号注册, 十分钟内有效."
from_email = 'cs10086086@qq.com'
to_email = [to_email]
default_cache.set(f"register_{to_email[0]}", code, timeout=600)
email = EmailMessage(
subject=subject,
body=body,
from_email=from_email,
to=to_email,
)
email.send()
return Response('邮件发送成功!', status=status.HTTP_201_CREATED)
class RegisterByEmail(APIView):
permission_classes = [AllowAny]
def post(self, request):
code = request.data.get('code', None)
to_email = request.data.get('to_email', None)
if code is None or to_email is None:
return Response(status=status.HTTP_400_BAD_REQUEST)
vcode = default_cache.get(f"register_{to_email}")
if vcode is None:
return Response(status=status.HTTP_400_BAD_REQUEST)
if code == vcode:
password = RandCode.get_alphanumeric_characters_code_8()
FUser.objects.create_user(
username=to_email,
email=to_email,
password=password
)
return Response("创建成功.",status=status.HTTP_200_OK)
else:
return Response(status=status.HTTP_400_BAD_REQUEST)