修复炒鸡炒鸡多的bug

bug有(不完全统计)
- 报名状态id与文档不符
- 查找手机号的正则没有17X和19X号段
- 弹幕,新生信息在后台没有展示详细字段和筛选功能
- 后台界面套了cdn导致的缓存错误,使别的电脑也能直接进入后台
- 验证码发送点太快会发送两次(应该是验证码直接写入数据库用时太长的原因)
- 目标邮箱不存在会直接报错(貌似是qq邮箱才会这样,换了爱特的公邮就没有这个)
- 弹幕页面如果切换到其他页面再回来会导致弹幕扎堆(前端bug)
- 后台作品上传图片会失败
- 太多了。。。。

经过两天的新生考验,还是抗住了,呜呜
少了很多功能
比如选中数据导出(现在只做了全体新生数据导出)
后台男女比例数据统计

但是,就这样吧
This commit is contained in:
LMark
2022-08-22 02:45:48 +08:00
parent 970f7563c0
commit 3a519b9afb
15 changed files with 213 additions and 128 deletions
+84 -13
View File
@@ -1,5 +1,6 @@
from rest_framework.response import Response
from rest_framework.generics import GenericAPIView
from rest_framework.permissions import IsAdminUser
from apps.history.models import Department
from apps.enroll.models import EmailVerifyRecord, NewMember
from apps.enroll.serializers import DepartmentSerializer, NewMemberSerializer, NewMemberScheduleSerializer, \
@@ -8,21 +9,32 @@ from rest_framework import status
from rest_framework.views import APIView
from apps.enroll.email import send_code_email
from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import HttpResponse
from ITShowPlatform.settings import BASE_DIR
from apps.enroll.models import NewMember
from utils.util import get_msg
import re
import re,configparser,os
import time
import xlwt
conf = configparser.RawConfigParser()
conf.read(os.path.join(BASE_DIR, "config.ini"), encoding="utf-8")
class DepartmentMessageView(GenericAPIView):
"""获取部门信息"""
queryset = Department.objects.all()
global queryset
queryset = Department.objects.filter(status=True)
serializer_class = DepartmentSerializer
def get(self, request):
serializer = self.get_serializer(instance=self.get_queryset(), many=True)
# serializer = self.get_serializer(instance=self.get_queryset(), many=True) #会自动补完成绝对路径
serializer = DepartmentSerializer(instance=queryset,many=True)
if request.query_params:
return Response({"code": 40000, "msg": get_msg("40000")})
for i in serializer.data:
i["icon"] = (conf.get("Django","Host") + i["icon"])
return Response({"code": 20000, "msg": get_msg("20000"), "data": serializer.data})
@@ -39,6 +51,7 @@ class SignUpView(GenericAPIView):
@csrf_exempt
def post(self, request):
data = request.data
print(data)
serializer = self.get_serializer(data=data)
code = data['verification_code']
ret = serializer.is_valid(raise_exception=False)
@@ -46,33 +59,38 @@ class SignUpView(GenericAPIView):
# print(f"code={code}")
try:
oj = EmailVerifyRecord.objects.get(email=data['email'])
print(oj.code,code)
send_time = str(oj.send_time).split('+')[0].split('.')[0]
send_time = time.mktime(time.strptime(send_time, '%Y-%m-%d %X'))
now = time.time()
if now - send_time > 120:
oj.delete()
return Response(
{"code": 40000, "msg": {"verification_code": get_msg(45032)}},
{"code": 40000, "msg": get_msg("45032")},
status=status.HTTP_400_BAD_REQUEST)
if code != oj.code:
return Response({"code": 45031, "msg": {"verification_code": get_msg(44031)}},
if str(code) != oj.code:
return Response({"code": 45031, "msg": get_msg("44031")},
status=status.HTTP_400_BAD_REQUEST)
except EmailVerifyRecord.DoesNotExist:
return Response({"code": 44032, "msg": {"verification_code": get_msg(44032)}},
except (EmailVerifyRecord.DoesNotExist,Exception):
return Response({"code": 44032, "msg": get_msg("44032")},
status=status.HTTP_400_BAD_REQUEST)
serializer.save()
oj.delete()
return Response({"code": 20000, "msg": get_msg(20000)})
else:
error = {}
for (i, j) in zip(serializer.errors.keys(), serializer.errors.values()):
error[str(i)] = str(j[0])
return Response({"code": 40000, "msg": error}, status=status.HTTP_400_BAD_REQUEST)
return Response({"code": int(j[0]), "msg": get_msg(j[0])}, status=status.HTTP_400_BAD_REQUEST)
#return Response({"code": 40000, "msg": error}, status=status.HTTP_400_BAD_REQUEST)
def get(self, request):
string = request.query_params.get('string', '')
try:
if re.match('^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$', string):
queryset = self.get_queryset().get(email=string)
elif re.match('^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$', string):
elif re.match('^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9]|17[0-9]|19[0-9])\d{8}$', string):
queryset = self.get_queryset().get(phone_number=string)
else:
queryset = self.get_queryset().get(id=-1)
@@ -90,14 +108,67 @@ class SendEmailView(APIView):
def post(self, request):
data = request.data
serializer = SendEmailSerializer(data=data)
# code_serializer = Code_email_serializer()
ret = serializer.is_valid()
if ret:
# serializer.save()
send_code_email(data.get("email"))
if not send_code_email(data.get("email")):
return Response({"code": 42031, "msg": get_msg(42031)}, status=status.HTTP_400_BAD_REQUEST)
return Response({"code": 20000, "msg": get_msg(20000)})
else:
error = {}
for (i, j) in zip(serializer.errors.keys(), serializer.errors.values()):
error[str(i)] = str(j[0])
return Response({"code": 40000, "msg": error}, status=status.HTTP_400_BAD_REQUEST)
return Response({"code": int(j[0]), "msg": get_msg(j[0])}, status=status.HTTP_400_BAD_REQUEST)
#return Response({"code": 40000, "msg": error}, status=status.HTTP_400_BAD_REQUEST)
class OucView(APIView):
"""用来给ipad自动任务跑每日上报脚本的,装杯用"""
def get(self, request):
return Response({"code": 20000, "msg": get_msg(20000)})
class ExportView(APIView):
#permission_classes = [IsAdminUser]
"""
不会带token访问,准备交给run宁哥
"""
def get(self, request, *args, **kwargs):
response = HttpResponse(content_type='application/ms-excel')
# 设置文件名称
response['Content-Disposition'] = 'attachment; filename="NewMember.xls"'
# 创建工作簿
wb = xlwt.Workbook(encoding='utf-8')
# 创建表
ws = wb.add_sheet('Member')
row_num = 0
font_style = xlwt.XFStyle()
# 二进制
font_style.font.bold = True
# 表头内容
columns = ['ID', '姓名', '性别', '年级专业',"意向部门","手机号码","邮箱","期待的话","报名状态"]
# 写进表头内容
for col_num in range(len(columns)):
ws.write(row_num, col_num, columns[col_num], font_style)
# Sheet body, remaining rows
font_style = xlwt.XFStyle()
# 获取数据库数据
rows = NewMember.objects.values_list('id', "name","sex","major","department","phone_number","email","expectation","status")
# 遍历提取出来的内容
for row in rows:
row_num += 1
# 逐行写入Excel
for col_num in range(len(row)):
#return HttpResponse(col_num)
ws.write(row_num, col_num, row[col_num], font_style)
wb.save(response)
return response