[后台题目管理的api部分] 增添创建题目、编辑题目API及测试用例
This commit is contained in:
@@ -1,7 +1,99 @@
|
||||
# coding=utf-8
|
||||
import json
|
||||
from django.shortcuts import render
|
||||
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from django.db.models import Q
|
||||
|
||||
from serizalizers import CreateProblemSerializer, EditProblemSerializer, ProblemSerializer
|
||||
from .models import Problem, ProblemTag
|
||||
from utils.shortcuts import serializer_invalid_response, error_response, success_response, paginate
|
||||
|
||||
|
||||
def problem_page(request, problem_id):
|
||||
# todo
|
||||
return render(request, "oj/problem/problem.html")
|
||||
|
||||
|
||||
class ProblemAdminAPIView(APIView):
|
||||
def post(self, request):
|
||||
"""
|
||||
题目发布json api接口
|
||||
---
|
||||
request_serializer: CreateProblemSerializer
|
||||
response_serializer: ProblemSerializer
|
||||
"""
|
||||
serializer = CreateProblemSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
problem = Problem.objects.create(title=data["title"],
|
||||
description=data["description"],
|
||||
test_case_id=data["test_case_id"],
|
||||
source=data["source"],
|
||||
sample=json.dumps(data["sample"]),
|
||||
time_limit=data["time_limit"],
|
||||
memory_limit=data["memory_limit"],
|
||||
difficulty=data["difficulty"],
|
||||
created_by=request.user,
|
||||
hint=data["hint"])
|
||||
|
||||
tags = ProblemTag.objects.filter(id__in=data["tags"])
|
||||
problem.tags.add(*tags)
|
||||
return success_response(ProblemSerializer(problem).data)
|
||||
else:
|
||||
return serializer_invalid_response(serializer)
|
||||
|
||||
def put(self, request):
|
||||
"""
|
||||
题目编辑json api接口
|
||||
---
|
||||
request_serializer: EditProblemSerializer
|
||||
response_serializer: ProblemSerializer
|
||||
"""
|
||||
serializer = EditProblemSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
print request.data
|
||||
try:
|
||||
problem = Problem.objects.get(id=data["id"])
|
||||
except Problem.DoesNotExist:
|
||||
return error_response(u"该题目不存在!")
|
||||
|
||||
problem.title = data["title"]
|
||||
problem.description = data["description"]
|
||||
problem.test_case_id = data["test_case_id"]
|
||||
problem.source = data["source"]
|
||||
problem.time_limit = data["time_limit"]
|
||||
problem.memory_limit = data["memory_limit"]
|
||||
problem.difficulty = data["difficulty"]
|
||||
problem.sample = json.dumps(data["sample"])
|
||||
problem.hint = data["hint"]
|
||||
problem.visible = data["visible"]
|
||||
|
||||
# 删除原有的标签的对应关系
|
||||
problem.tags.remove(*problem.tags.all())
|
||||
# 重新添加所有的标签
|
||||
problem.tags.add(*ProblemTag.objects.filter(id__in=data["tags"]))
|
||||
problem.save()
|
||||
return success_response(ProblemSerializer(problem).data)
|
||||
else:
|
||||
return serializer_invalid_response(serializer)
|
||||
|
||||
|
||||
class ProblemAPIView(APIView):
|
||||
def get(self, request):
|
||||
"""
|
||||
题目分页json api接口
|
||||
---
|
||||
response_serializer: ProblemSerializer
|
||||
"""
|
||||
problem = Problem.objects.all().order_by("-last_update_time")
|
||||
visible = request.GET.get("visible", None)
|
||||
if visible:
|
||||
problem = problem.filter(visible=(visible == "true"))
|
||||
keyword = request.GET.get("keyword", None)
|
||||
if keyword:
|
||||
problem = problem.filter(Q(difficulty__contains=keyword))
|
||||
|
||||
return paginate(request, problem, ProblemSerializer)
|
||||
|
||||
Reference in New Issue
Block a user