新建账户邮箱发送功能配置
1. 先创建新建账户功能
① shcool app serializer.py文件中创建新用户创建展示校验功能
User为系统自带,需要进行导入。
② school app views.py文件中创建student以及teacher等账户创建功能
import random import string from django.contrib.auth.models import Group from django.shortcuts import render from rest_framework.decorators import action from rest_framework.response import Response from rest_framework.status import HTTP_404_NOT_FOUND, HTTP_201_CREATED from rest_framework.viewsets import ModelViewSet from .serializers import * from rest_framework.permissions import IsAuthenticated from utils.permission import TeacherPermission # Create your views here. class ClassesViewSet(ModelViewSet): queryset = Classes.objects.filter(is_delete=False) serializer_class = ClassesSerializer # permission_classes = [IsAuthenticated] # 在未登录的状态下无法查看数据信息 permission_classes = [TeacherPermission] # 定义老师是否登录前后查看的数据信息,同样也可以定义学生的 def get_serializer(self, *args, **kwargs): # 重写get_serializer,根据不同的操作显示不同的序列化器 if self.action == 'students' or self.action == 'teachers': return CreateUserSerializer(*args, **kwargs) return ClassesSerializer(*args, **kwargs) @action(methods=['post'], detail=True) def students(self, request, pk): # 获取班级 try: classes = self.get_queryset().get(id=pk) except Classes.DoesNotExist: return Response(status=HTTP_404_NOT_FOUND) # 得到前端传入的数据 username = request.data['username'] email = request.data['email'] first_name = request.data['first_name'] # 判断该用户是否已经在该班级,查询班级所有成员,以用户作为条件 member = classes.member.filter(username=username) # 如果在,返回提示已存在 if member: return Response({'msg': '该成员已经加入该班级'}) # 如果不在,则判定该用户是否存在, 判断是否是新学员 user = User.objects.filter(username=username) if user: user = user.first() # 如果存在,将该用户添加到班级,并返回 classes.member.add(user) return Response(self.get_serializer(user).data) # 如果是新学员,使用序列化器进行反序列化,校验传入进来的数据 user_serializer = self.get_serializer(data=request.data) user_serializer.is_valid(raise_exception=True) # 对数据合法性进行验证 user = User(username=username, first_name=first_name, email=email) # 生成初始密码 source = string.ascii_letters + string.digits password = ''.join(random.sample(source, 6)) # 直接生成6位随机密码 user.set_password(password) # 对随机生成的6位密码进行加密 user.save() # 发送邮件 print(email, username, first_name, classes.name) # 设置成学生身份 group = Group.objects.get(id=2) # 2 为学生分组 group.user_set.add(user) # 添加到对应班级 classes.member.add(user) # 返回 return Response(user_serializer.data, status=HTTP_201_CREATED) @action(methods=['post'], detail=True) def teachers(self, request, pk): # 获取班级 try: classes = self.get_queryset().get(id=pk) except Classes.DoesNotExist: return Response(status=HTTP_404_NOT_FOUND) # 得到前端传入的数据 username = request.data['username'] email = request.data['email'] first_name = request.data['first_name'] # 判断该用户是否已经在该班级,查询班级所有成员,以用户作为条件 member = classes.member.filter(username=username) # 如果在,返回提示已存在 if member: return Response({'msg': '该成员已经加入该班级'}) # 如果不在,则判定该用户是否存在, 判断是否是新学员 user = User.objects.filter(username=username) if user: user = user.first() # 如果存在,将该用户添加到班级,并返回 classes.member.add(user) return Response(self.get_serializer(user).data) # 如果是新学员,使用序列化器进行反序列化,校验传入进来的数据 user_serializer = self.get_serializer(data=request.data) user_serializer.is_valid(raise_exception=True) # 对数据合法性进行验证 user = User(username=username, first_name=first_name, email=email) # 生成初始密码 source = string.ascii_letters + string.digits password = ''.join(random.sample(source, 6)) # 直接生成6位随机密码 user.set_password(password) # 对随机生成的6位密码进行加密 user.save() # 发送邮件 print(email, username, first_name, classes.name) # 设置成学生身份 group = Group.objects.get(id=1) # 1 为老师分组 group.user_set.add(user) # 添加到对应班级 classes.member.add(user) # 返回 return Response(user_serializer.data, status=HTTP_201_CREATED)
其中发送邮件的部分暂时为进行配置,需要用到celery配置方法。
一、Celery概述
Celery:专注于实时处理和任务调度的分布式任务队列,同时提供操作和维护分布式系统所需的工具,即插即用的异步任务队列。
优点:简单--易于使用和维护,由丰富的文档;高效--单个进程每分钟可以处理数百万个任务;灵活--几乎每个部分都可以自定义拓展。
二、Celery组成
组成:client--任务的发出者; Broker--中间人、任务队列; Worker--任务的处理者。
三、安装与使用
安装: pip install celery
配置使用:
1. 首先在主项目目录建立celery_tasks文件夹,在此文件夹下建立celery_config.py文件,用于配置celery作业的缓存路径
2. 再在celery_tasks文件夹中建立celery_main.py的主执行文件,用于app调用
3. 最后在celery_tasks文件夹中建立email文件夹(任务文件夹,可根据需求进行命名,如邮箱,短信等), 建立tasks.py(名字固定)文件,在此文件中进行发送邮件配置
在上图中,可以看到需要导入settings.py文件中配置的发件人的邮箱信息,参考第四步中进行相关信息配置。
四、邮箱配置
在setting.py文件中进行配置,需要邮箱账号以及授权码,可根据需求习惯进行信息配置,以下以qq.com为例
1. 先在config文件夹中建立emailconfig.py配置邮箱账号以及授权码信息
2. 在回到settings.py文件中进行导入并配置服务器、端口等信息
完成以上所有配置后,回到school app views.py文件进行发送功能配置
1. 导入方法
from celery_tasks.email.tasks import send_email_task
2. 调用方法
3. 最重要关键的一个步骤,需要进入虚拟环境主项目文件夹下,执行celery_main文件开启,方可进行邮件发送
4. 最后进入前端进行students/teachers账户添加确认是否有正常发送邮件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理