class StudentViewSet(viewsets.ModelViewSet): queryset = Student.objects.all() serializer_class = StudentSerializer permission_classes = [permissions.AllowAny] @method_decorator(cached_view_as(Student)) def dispatch(self, *args, **kwargs): return super(StudentViewSet, self).dispatch(*args, **kwargs)
class DormitoriesViewSet(viewsets.ModelViewSet): queryset = Dormitories.objects.all() serializer_class = DormitoriesSerializer permission_classes = [permissions.DjangoModelPermissions] @method_decorator(cached_view_as(Dormitories)) def dispatch(self, *args, **kwargs): return super(DormitoriesViewSet, self).dispatch(*args, **kwargs)
class RegionViewSet(viewsets.ReadOnlyModelViewSet): """ API returns the list of the regions """ queryset = Region.objects.all().order_by('name') pagination_class = None serializer_class = RegionSerializer @method_decorator(cached_view_as(Region)) def dispatch(self, *args, **kwargs): return super(RegionViewSet, self).dispatch(*args, **kwargs)
def test_cached_view_as(self): get_calls = self._make_func(cached_view_as(Category)) factory = RequestFactory() r1 = factory.get('/hi') r2 = factory.get('/hi') r2.META['REMOTE_ADDR'] = '10.10.10.10' r3 = factory.get('/bye') self.assertEqual(get_calls(r1), 1) # cache self.assertEqual(get_calls(r1), 1) # hit self.assertEqual(get_calls(r2), 1) # hit, since only url is considered self.assertEqual(get_calls(r3), 2) # miss
class LocalityViewSet(viewsets.ReadOnlyModelViewSet): """ API returns the list of the localities """ queryset = Locality.objects.all().order_by('name') serializer_class = LocalitySerializer filter_backends = (DjangoFilterBackend, ) pagination_class = None filter_fields = ('district', ) @method_decorator(cached_view_as(Locality)) def dispatch(self, *args, **kwargs): return super(LocalityViewSet, self).dispatch(*args, **kwargs)
class HospitalShortInfoListAPIView(ListAPIView): """ API create hospital short info """ queryset = Hospital.objects.filter(hidden=False) serializer_class = HospitalShortInfoSerializer pagination_class = None filter_backends = (DjangoFilterBackend, SearchFilter) search_fields = ('name', ) filter_fields = ('search_locality_id', 'search_district_id', 'search_region_id') @method_decorator(cached_view_as(Hospital)) def dispatch(self, *args, **kwargs): return super(HospitalShortInfoListAPIView, self).dispatch(*args, **kwargs)
class AssignmentAPI(viewsets.ModelViewSet): queryset = Assignment.objects.all() serializer_class = AssignmentSerializer permission_classes = [permissions.AllowAny] classes = None def create(self, request, *args, **kwargs): try: self.classes = json.loads(request.data.__getitem__("classes_involved")) if len(self.classes) < 1: raise ValidationError({ "classes": [ "This field is required." ] }) except Exception: raise ValidationError({ "classes": [ "This field is required." ] }) return super().create(request, *args, **kwargs) def perform_create(self, serializer): instance = serializer.save() print("classes", self.classes) if len(self.classes) > 0: for q in self.classes: print(q) obj = AssignmentClass(class_ns=Classes.objects.get(pk=q), assignment=Assignment.objects.get(pk=instance.id)) obj.save() print("id", obj.id) super().perform_create(serializer) @method_decorator(cached_view_as(Assignment.objects.all())) def dispatch(self, *args, **kwargs): return super(AssignmentAPI, self).dispatch(*args, **kwargs)
from cacheops import cached_view_as from django.conf.urls import url from rest_framework.urlpatterns import format_suffix_patterns from articles import views, views_extras from articles.models import Article, Comment urlpatterns = [ url(r'^$', cached_view_as(Article)(views.ArticleList.as_view()), name="article_list"), url(r'^(?P<slug>[-_\w]+)/$', cached_view_as(Article)(views.ArticleDetail.as_view()), name="article_detail"), url(r'^(?P<article>[0-9]+)/comments/$', cached_view_as(Comment)(views.CommentList.as_view()), name="comment_list"), url(r'^vote-article/(?P<pk>[0-9]+)/$', views.VoteArticle.as_view(), name="vote_article"), url(r'^vote-comment/(?P<pk>[0-9]+)/$', views.VoteComment.as_view(), name="vote_comment"), url(r'^has-perm/write-article/$', views_extras.CanWriteArticle.as_view(), name="can_write_article"), url(r'^has-perm/edit-article/(?P<slug>[-_\w]+)/$', views_extras.CanEditDeleteArticle.as_view(), name="can_edit_article"), ] urlpatterns = format_suffix_patterns(urlpatterns)