diff --git a/oj/urls.py b/oj/urls.py index 1431dc6..fbe7856 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -11,7 +11,7 @@ from group.views import GroupAdminAPIView from admin.views import AdminTemplateView from problem.views import ProblemAdminAPIView -from problem.views import TestCaseUploadAPIView +from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView urlpatterns = [ @@ -41,4 +41,5 @@ urlpatterns = [ url(r'^api/admin/group/$', GroupAdminAPIView.as_view(), name="group_admin_api"), url(r'^api/admin/problem/$', ProblemAdminAPIView.as_view(), name="problem_admin_api"), url(r'^api/admin/test_case_upload/$', TestCaseUploadAPIView.as_view(), name="test_case_upload_api"), + url(r'^api/admin/tag/$', ProblemTagAdminAPIView.as_view(), name="problem_tag_admin_api"), ] diff --git a/problem/migrations/0002_remove_problemtag_description.py b/problem/migrations/0002_remove_problemtag_description.py new file mode 100644 index 0000000..2953e68 --- /dev/null +++ b/problem/migrations/0002_remove_problemtag_description.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('problem', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='problemtag', + name='description', + ), + ] diff --git a/problem/models.py b/problem/models.py index 0132072..3e236af 100644 --- a/problem/models.py +++ b/problem/models.py @@ -6,7 +6,7 @@ from account.models import User class ProblemTag(models.Model): name = models.CharField(max_length=30) - description = models.CharField(max_length=50) + # description = models.CharField(max_length=50) class Meta: db_table = "problem_tag" diff --git a/problem/serizalizers.py b/problem/serizalizers.py index 441c9c5..66f3d75 100644 --- a/problem/serizalizers.py +++ b/problem/serizalizers.py @@ -4,7 +4,7 @@ import json from rest_framework import serializers from account.models import User -from .models import Problem +from .models import Problem, ProblemTag class ProblemSampleSerializer(serializers.ListField): @@ -60,3 +60,12 @@ class EditProblemSerializer(serializers.Serializer): hint = serializers.CharField(max_length=10000) visible = serializers.BooleanField() + + +class ProblemTagSerializer(serializers.ModelSerializer): + class Meta: + model = ProblemTag + + +class CreateProblemTagSerializer(serializers.Serializer): + name = serializers.CharField(max_length=10) \ No newline at end of file diff --git a/problem/views.py b/problem/views.py index 0a5490f..eda2c72 100644 --- a/problem/views.py +++ b/problem/views.py @@ -11,10 +11,36 @@ from django.db.models import Q from rest_framework.views import APIView from utils.shortcuts import serializer_invalid_response, error_response, success_response, paginate, rand_str -from .serizalizers import CreateProblemSerializer, EditProblemSerializer, ProblemSerializer +from .serizalizers import (CreateProblemSerializer, EditProblemSerializer, ProblemSerializer, + ProblemTagSerializer, CreateProblemTagSerializer) from .models import Problem, ProblemTag +class ProblemTagAdminAPIView(APIView): + def post(self, request): + """ + 创建标签的接口 + --- + request_serializer: CreateProblemTagSerializer + """ + serializer = CreateProblemTagSerializer(data=request.data) + if serializer.is_valid(): + try: + tag = ProblemTag.objects.get(name=serializer.data["name"]) + except ProblemTag.DoesNotExist: + tag = ProblemTag.objects.create(name=serializer.data["name"]) + return success_response(ProblemTagSerializer(tag).data) + else: + return error_response(serializer) + + def get(self, request): + keyword = request.GET.get("keyword", None) + if not keyword: + return error_response(u"参数错误") + tags = ProblemTag.objects.filter(name__contains=keyword) + return success_response(ProblemTagSerializer(tags, many=True).data) + + def problem_page(request, problem_id):