You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
6.0 KiB
152 lines
6.0 KiB
2 months ago
|
import os
|
||
|
from openpyxl import load_workbook
|
||
|
# Create your views here.
|
||
|
import random
|
||
|
from django.http import JsonResponse
|
||
|
|
||
|
from .models import Student
|
||
|
|
||
|
def save_file(file, save_directory):
|
||
|
file_path = os.path.join(save_directory, file.name)
|
||
|
with open(file_path, 'wb+') as destination:
|
||
|
for chunk in file.chunks():
|
||
|
destination.write(chunk)
|
||
|
return file_path
|
||
|
|
||
|
def getinformation(request):
|
||
|
if request.method == 'POST':
|
||
|
try:
|
||
|
class_name = request.POST.get('class_name')
|
||
|
file = request.FILES.get('file')
|
||
|
if file and class_name:
|
||
|
if Student.objects.filter(class_name=class_name).first(): # 如果表中已经有该班级
|
||
|
response_data = {'message': 0, 'error': '该班级已创建'}
|
||
|
return JsonResponse(response_data,json_dumps_params={'ensure_ascii': False})
|
||
|
else:
|
||
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||
|
save_directory = os.path.join(current_dir, 'excelfile')
|
||
|
if not os.path.exists(save_directory):
|
||
|
os.makedirs(save_directory)
|
||
|
file_path = save_file(file, save_directory)
|
||
|
wb = load_workbook(file_path)
|
||
|
ws = wb.active
|
||
|
for row in ws.iter_rows(min_row=2, values_only=True):
|
||
|
sid, name = row[0], row[1]
|
||
|
Student.objects.create(sid=sid, name=name, class_name=class_name, credit=0.0,
|
||
|
probability=1.0,max = 0 , min = 0)
|
||
|
response_data = {'message': 1 , 'total': ws.max_row-1}
|
||
|
return JsonResponse(response_data,json_dumps_params={'ensure_ascii': False})
|
||
|
else:
|
||
|
response_data = {
|
||
|
'message': 0,
|
||
|
'error': '缺少必要的参数'
|
||
|
}
|
||
|
return JsonResponse(response_data,json_dumps_params={'ensure_ascii': False})
|
||
|
except Exception as e:
|
||
|
response_data = {
|
||
|
'message': 0,
|
||
|
'error': str(e)
|
||
|
}
|
||
|
return JsonResponse(response_data)
|
||
|
else:
|
||
|
response_data = {
|
||
|
'message': 0,
|
||
|
'error': '请求方法错误'
|
||
|
}
|
||
|
return JsonResponse(response_data,json_dumps_params={'ensure_ascii': False})
|
||
|
|
||
|
|
||
|
def call_students(request): #前端点击点名按钮向后端发送请求
|
||
|
if request.method == 'POST':
|
||
|
try:
|
||
|
class_name = request.POST.get('class_name') #班级名称
|
||
|
num0 = request.POST.get('num') #本次点名的人数
|
||
|
mode0 = request.POST.get('mode')
|
||
|
result = {}
|
||
|
if class_name and num0 and mode0:
|
||
|
num = int(num0)
|
||
|
mode = int(mode0)
|
||
|
s = Student() # 创建一个实例
|
||
|
result = s.callstu(class_name, num, mode)
|
||
|
response_data = result #成功返回
|
||
|
else:
|
||
|
response_data = {
|
||
|
'message': 0,
|
||
|
'error': '缺少必要的参数'
|
||
|
}
|
||
|
except Exception as e:
|
||
|
response_data = {
|
||
|
'message': 0,
|
||
|
'error': str(e)
|
||
|
}
|
||
|
else:
|
||
|
response_data = {
|
||
|
'message': 0,
|
||
|
'error': '请求方法错误'
|
||
|
}
|
||
|
return JsonResponse(response_data)
|
||
|
|
||
|
def updatetable(request):
|
||
|
if request.method == 'POST':
|
||
|
try:
|
||
|
point = float(request.POST.get('point'))
|
||
|
class_name = request.POST.get('class_name') #班级名称
|
||
|
sid = request.POST.get('sid') #本次点名的学生学号
|
||
|
style = int(request.POST.get('style'))
|
||
|
if point and class_name and sid and style:
|
||
|
s = Student() # 创建一个实例
|
||
|
s.updateinfor(point, class_name,sid, style)
|
||
|
response_data = {'message': 1}
|
||
|
else:
|
||
|
response_data = {'message': 0,'error': '缺少必要的参数'}
|
||
|
except Exception as e:
|
||
|
response_data = {'message': 0,'error': str(e)}
|
||
|
else:
|
||
|
response_data = {'message': 0,'error': '请求方法错误'}
|
||
|
return JsonResponse(response_data)
|
||
|
|
||
|
import random
|
||
|
from django.http import JsonResponse
|
||
|
|
||
|
def choosestyle(request):
|
||
|
if request.method == 'POST':
|
||
|
random_number = random.choice([1, 2, 3, 4, 5, 6])
|
||
|
return JsonResponse({'number': random_number}) # 将数字包装在字典中
|
||
|
else:
|
||
|
response_data = {'error': '请求方法错误'}
|
||
|
return JsonResponse(response_data)
|
||
|
|
||
|
from django.db.models import Window, F
|
||
|
from django.db.models.functions import Rank
|
||
|
|
||
|
|
||
|
def show_information (request):
|
||
|
if request.method == 'POST':
|
||
|
try:
|
||
|
class_name = request.POST.get('class_name') # 班级名称
|
||
|
sid = request.POST.get('sid') # 本次想查询的学生学号
|
||
|
order = request.POST.get('order') #前端返回的序号
|
||
|
response_data = {'message': 0}
|
||
|
if class_name and sid:
|
||
|
class_students = Student.objects.filter(class_name=class_name).annotate(
|
||
|
rank=Window(
|
||
|
expression=Rank(),
|
||
|
order_by=F('credit').desc()
|
||
|
)
|
||
|
).order_by('credit')
|
||
|
# 查找特定学生的排名
|
||
|
student_rank = None
|
||
|
name = None
|
||
|
for student in class_students:
|
||
|
if student.sid == sid:
|
||
|
student_rank = student.rank
|
||
|
name = student.name
|
||
|
break
|
||
|
response_data = {'order':order,'class_name': class_name,'name':name,'sid':sid,'student_rank':student_rank}
|
||
|
else:
|
||
|
response_data = {'message':0,'error':'缺少必要的参数'}
|
||
|
except Exception as e:
|
||
|
response_data = {'message': 0, 'error': str(e)}
|
||
|
else:
|
||
|
response_data = {'message': 0, 'error': '请求方法错误'}
|
||
|
return JsonResponse(response_data)
|