Django Rest Framework Tips and Tricks Xavier ORDOQUY @linovia_net
Django Rest Framework Tips and Tricks
Xavier ORDOQUY @linovia_net
Freelance!(since 2004) Python
Django!(Backend)
Raven maintainer!(Sentry client)
Former!PyGTK!
contributor
Various!pull requests
irc: Linovia@linovia_net
Expertise
Dev
Reminder
• It is Django !
!
• It is Python !
Fully featured• Serializers
• ModelSerializers
• Parsers
• Renderers
• Authentication
• Permission
• Throttling
• Routers
• Views
• ViewSets
• Filtering
• Testing
• Pagination
from rest_framework.decorators import api_view! !@api_view(['GET'])!def hello_world(request):! return Response({"message": "Hello, world!"})
but loosely coupled
Authentication
Content negotiation
Serializers
Generic views
Customizable web interface
Debug toolbar
pre/post save
class MyCreateView(CreateAPIView):! model = models.MyModel! serializer_class = serializers.MySerializer!! def post_save(self, obj, created):! if created:! obj.reviewers = [user1, user2]!
Class based views
class MyMixin(object):! model = models.MyModel! serializer_class = serializers.MySerializer!!!class MyCreateView(MyMixin, CreateAPIView):! pass!
• MRO: mixins are on the left side
# views.py!class UserViewSet(viewsets.ModelViewSet):! queryset = User.objects.all()! serializer_class = UserSerializer!!# urls.py!router = DefaultRouter()!router.register(r'users', views.UserViewSet)!!urlpatterns = patterns('',! url(r'^', include(router.urls)),!)!
Viewsets & routers Nice to get started but optional
Auth / Permissions
• Auth are for knowing who you are
!
• Permissions are to grant you access
Testing Utilities
• APIRequestFactory + format !
• force_authenticate
• APIClient
response = self.client.get('/users/4/')!self.assertEqual(response.data,! {'id': 4, 'username': 'lauren'})!
Performances
• Fast to prototype
• Easy to tune
• Django performance tips also applies !
Tem
ps e
m m
s
0
10
20
30
40
50
60
70
80
90
100
110
120
130
140
Full stack Serialisation Redis Content nego Middleware HttpResponse
Database lookup Redis lookup SerializationDjango request/response API view Response rendering
• Django Rest Framwork Optimization: http://dabapps.com/blog/api-performance-profiling-django-rest-framework/