/
identity.py
60 lines (46 loc) · 1.95 KB
/
identity.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from django.contrib.auth import models as auth_models
from django.utils import encoding
from rest_framework import generics, parsers, renderers, serializers, viewsets
from rest_framework.decorators import detail_route, list_route
from rest_framework.response import Response
from rest_framework_json_api import mixins, utils
from ..serializers.identity import IdentitySerializer
from ..serializers.post import PostSerializer
class Identity(mixins.MultipleIDMixin, viewsets.ModelViewSet):
queryset = auth_models.User.objects.all().order_by('pk')
serializer_class = IdentitySerializer
# demonstrate sideloading data for use at app boot time
@list_route()
def posts(self, request):
self.resource_name = False
identities = self.queryset
posts = [{'id': 1, 'title': 'Test Blog Post'}]
data = {
encoding.force_text('identities'): IdentitySerializer(identities, many=True).data,
encoding.force_text('posts'): PostSerializer(posts, many=True).data,
}
return Response(utils.format_field_names(data, format_type='camelize'))
@detail_route()
def manual_resource_name(self, request, *args, **kwargs):
self.resource_name = 'data'
return super(Identity, self).retrieve(request, args, kwargs)
@detail_route()
def validation(self, request, *args, **kwargs):
raise serializers.ValidationError('Oh nohs!')
class GenericIdentity(generics.GenericAPIView):
"""
An endpoint that uses DRF's default format so we can test that.
GET /identities/generic
"""
serializer_class = IdentitySerializer
allowed_methods = ['GET']
renderer_classes = (renderers.JSONRenderer, )
parser_classes = (parsers.JSONParser, )
def get_queryset(self):
return auth_models.User.objects.all()
def get(self, request, pk=None):
"""
GET request
"""
obj = self.get_object()
return Response(IdentitySerializer(obj).data)