add announcement delete api

This commit is contained in:
virusdefender 2016-12-03 20:22:14 +08:00
parent f56d75cf91
commit 0f03e75713
4 changed files with 48 additions and 45 deletions

View File

@ -1,4 +1,6 @@
from utils.api.tests import APITestCase, APIClient from utils.api.tests import APITestCase
from .models import Announcement
class AnnouncementAdminTest(APITestCase): class AnnouncementAdminTest(APITestCase):
@ -16,6 +18,7 @@ class AnnouncementAdminTest(APITestCase):
def test_create_announcement(self): def test_create_announcement(self):
resp = self.create_announcement() resp = self.create_announcement()
self.assertSuccess(resp) self.assertSuccess(resp)
return resp
def test_edit_announcement(self): def test_edit_announcement(self):
data = {"id": self.create_announcement().data["data"]["id"], "title": "ahaha", "content": "test content", data = {"id": self.create_announcement().data["data"]["id"], "title": "ahaha", "content": "test content",
@ -26,3 +29,9 @@ class AnnouncementAdminTest(APITestCase):
self.assertEqual(resp_data["title"], "ahaha") self.assertEqual(resp_data["title"], "ahaha")
self.assertEqual(resp_data["content"], "test content") self.assertEqual(resp_data["content"], "test content")
self.assertEqual(resp_data["visible"], False) self.assertEqual(resp_data["visible"], False)
def test_delete_announcemen(self):
id = self.test_create_announcement().data["data"]["id"]
resp = self.client.delete(self.url, data={'id': id})
self.assertSuccess(resp)
self.assertFalse(Announcement.objects.filter(id=id).exists())

View File

@ -1,7 +1,7 @@
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from account.decorators import super_admin_required from account.decorators import super_admin_required
from utils.api import APIView from utils.api import APIView, validate_serializer, IDOnlySerializer
from .models import Announcement from .models import Announcement
from .serializers import (CreateAnnouncementSerializer, AnnouncementSerializer, from .serializers import (CreateAnnouncementSerializer, AnnouncementSerializer,
@ -9,42 +9,36 @@ from .serializers import (CreateAnnouncementSerializer, AnnouncementSerializer,
class AnnouncementAdminAPI(APIView): class AnnouncementAdminAPI(APIView):
@validate_serializer(CreateAnnouncementSerializer)
@super_admin_required @super_admin_required
def post(self, request): def post(self, request):
""" """
publish announcement publish announcement
""" """
serializer = CreateAnnouncementSerializer(data=request.data) data = request.data
if serializer.is_valid(): announcement = Announcement.objects.create(title=data["title"],
data = serializer.data content=data["content"],
announcement = Announcement.objects.create(title=data["title"], created_by=request.user)
content=data["content"], return self.success(AnnouncementSerializer(announcement).data)
created_by=request.user)
return self.success(AnnouncementSerializer(announcement).data)
else:
return self.invalid_serializer(serializer)
@validate_serializer(EditAnnouncementSerializer)
@super_admin_required @super_admin_required
def put(self, request): def put(self, request):
""" """
edit announcement edit announcement
""" """
serializer = EditAnnouncementSerializer(data=request.data) data = request.data
if serializer.is_valid(): try:
data = serializer.data announcement = Announcement.objects.get(id=data["id"])
try: except Announcement.DoesNotExist:
announcement = Announcement.objects.get(id=data["id"]) return self.error(_("Announcement does not exist"))
except Announcement.DoesNotExist:
return self.error(_("Announcement does not exist"))
announcement.title = data["title"] announcement.title = data["title"]
announcement.content = data["content"] announcement.content = data["content"]
announcement.visible = data["visible"] announcement.visible = data["visible"]
announcement.save() announcement.save()
return self.success(AnnouncementSerializer(announcement).data) return self.success(AnnouncementSerializer(announcement).data)
else:
return self.invalid_serializer(serializer)
@super_admin_required @super_admin_required
def get(self, request): def get(self, request):
@ -62,3 +56,9 @@ class AnnouncementAdminAPI(APIView):
if request.GET.get("visible") == "true": if request.GET.get("visible") == "true":
announcement = announcement.filter(visible=True) announcement = announcement.filter(visible=True)
return self.success(self.paginate_data(request, announcement, AnnouncementSerializer)) return self.success(self.paginate_data(request, announcement, AnnouncementSerializer))
@validate_serializer(IDOnlySerializer)
@super_admin_required
def delete(self, request):
Announcement.objects.filter(id=request.data["id"]).delete()
return self.success()

View File

@ -14,4 +14,8 @@ class DateTimeTZField(serializers.DateTimeField):
def to_representation(self, value): def to_representation(self, value):
self.format = "%Y-%-m-%d %-H:%-M:%-S" self.format = "%Y-%-m-%d %-H:%-M:%-S"
value = timezone.localtime(value) value = timezone.localtime(value)
return super(DateTimeTZField, self).to_representation(value) return super(DateTimeTZField, self).to_representation(value)
class IDOnlySerializer(serializers.Serializer):
id = serializers.IntegerField()

View File

@ -1,6 +1,6 @@
# coding=utf-8
import json import json
import logging import logging
import functools
from django.http import HttpResponse, QueryDict from django.http import HttpResponse, QueryDict
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
@ -31,7 +31,7 @@ class URLEncodedParser(object):
@staticmethod @staticmethod
def parse(body): def parse(body):
return QueryDict(body).dict() return QueryDict(body)
class JSONResponse(object): class JSONResponse(object):
@ -127,10 +127,11 @@ class APIView(View):
return data return data
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
try: if self.request_parsers:
request.data = self._get_request_data(self.request) try:
except ValueError as e: request.data = self._get_request_data(self.request)
return self.error(err="invalid-request", msg=str(e)) except ValueError as e:
return self.error(err="invalid-request", msg=str(e))
try: try:
return super(APIView, self).dispatch(request, *args, **kwargs) return super(APIView, self).dispatch(request, *args, **kwargs)
except Exception as e: except Exception as e:
@ -144,18 +145,6 @@ class CSRFExemptAPIView(APIView):
return super(CSRFExemptAPIView, self).dispatch(request, *args, **kwargs) return super(CSRFExemptAPIView, self).dispatch(request, *args, **kwargs)
class SNServerAPIView(CSRFExemptAPIView):
def empty_response(self):
resp = HttpResponse()
resp["Content-Length"] = 0
return resp
def response(self, data):
resp = super(SNServerAPIView, self).response(data)
resp["Content-Length"] = len(resp.content)
return resp
def validate_serializer(serializer): def validate_serializer(serializer):
""" """
@validate_serializer(TestSerializer) @validate_serializer(TestSerializer)
@ -163,6 +152,7 @@ def validate_serializer(serializer):
return self.success(request.data) return self.success(request.data)
""" """
def validate(view_method): def validate(view_method):
@functools.wraps(view_method)
def handle(*args, **kwargs): def handle(*args, **kwargs):
self = args[0] self = args[0]
request = args[1] request = args[1]
@ -176,4 +166,4 @@ def validate_serializer(serializer):
return handle return handle
return validate return validate