2017-05-01 05:30:47 +00:00
|
|
|
from django.db.models import Q
|
2017-01-24 05:22:40 +00:00
|
|
|
from utils.api import APIView
|
|
|
|
|
2017-05-01 05:03:48 +00:00
|
|
|
from ..models import ProblemTag, Problem
|
|
|
|
from ..serializers import ProblemSerializer, TagSerializer
|
2017-01-24 05:22:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
class ProblemTagAPI(APIView):
|
|
|
|
def get(self, request):
|
2017-05-01 05:20:26 +00:00
|
|
|
return self.success(TagSerializer(ProblemTag.objects.all(), many=True).data)
|
2017-05-01 05:03:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
class ProblemAPI(APIView):
|
|
|
|
def get(self, request):
|
|
|
|
# 问题详情页
|
|
|
|
problem_id = request.GET.get("id")
|
|
|
|
if problem_id:
|
|
|
|
try:
|
2017-07-04 12:59:25 +00:00
|
|
|
problem = Problem.objects.get(_id=problem_id, visible=True)
|
2017-05-01 05:03:48 +00:00
|
|
|
return self.success(ProblemSerializer(problem).data)
|
|
|
|
except Problem.DoesNotExist:
|
|
|
|
return self.error("Problem does not exist")
|
|
|
|
|
|
|
|
problems = Problem.objects.filter(visible=True)
|
|
|
|
# 按照标签筛选
|
2017-05-08 12:37:54 +00:00
|
|
|
tag_text = request.GET.get("tag")
|
2017-05-01 05:03:48 +00:00
|
|
|
if tag_text:
|
|
|
|
try:
|
|
|
|
tag = ProblemTag.objects.get(name=tag_text)
|
|
|
|
except ProblemTag.DoesNotExist:
|
|
|
|
return self.error("The Tag does not exist.")
|
|
|
|
problems = tag.problem_set.all().filter(visible=True)
|
|
|
|
|
|
|
|
# 搜索的情况
|
|
|
|
keyword = request.GET.get("keyword", "").strip()
|
|
|
|
if keyword:
|
|
|
|
problems = problems.filter(Q(title__contains=keyword) | Q(description__contains=keyword))
|
|
|
|
|
|
|
|
# 难度筛选
|
2017-05-08 12:37:54 +00:00
|
|
|
difficulty_rank = request.GET.get("difficulty")
|
2017-05-01 05:03:48 +00:00
|
|
|
if difficulty_rank:
|
|
|
|
problems = problems.filter(difficulty=difficulty_rank)
|
|
|
|
|
|
|
|
return self.success(self.paginate_data(request, problems, ProblemSerializer))
|