2015-08-02 00:50:19 +00:00
|
|
|
# coding=utf-8
|
2015-08-09 12:03:22 +00:00
|
|
|
import json
|
2015-06-26 07:59:53 +00:00
|
|
|
from django.shortcuts import render
|
|
|
|
|
2015-08-09 12:03:22 +00:00
|
|
|
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
|
|
|
|
|
2015-08-02 00:50:19 +00:00
|
|
|
|
|
|
|
def problem_page(request, problem_id):
|
|
|
|
# todo
|
2015-08-02 01:59:13 +00:00
|
|
|
return render(request, "oj/problem/problem.html")
|
2015-08-09 12:03:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
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)
|