Day 10 (week 2) — ViewSets in Django
ViewSets in Django are almost the same thing as
Views except they provide operations like
update instead of
put. What this is going to allow us to do is refactor the views in our API to be much simpler. To do this, we are also going to need a
Router class which will handle wiring up the URL conf for us.
I won’t include the same code from yesterday, since it’s the same project. Here is the refactored version, which is much cleaner.
This viewset automatically provides `list`, `create`, `retrieve`,
`update` and `destroy` actions.
Additionally we also provide an extra `highlight` action.
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
def highlight(self, request, *args, **kwargs):
snippet = self.get_object()
def perform_create(self, serializer):
This viewset automatically provides `list` and `detail` actions.
queryset = User.objects.all()
serializer_class = UserSerializer
Notice now that we have only two classes: one for Snippets and the other for Users. The
ViewSet that both classes inherit from bring along all the functionality that we need for our API.
This is another great example of how knowing which piece of high-level code to run is critical in using a framework like the Django REST framework. Ordinarily, we would have to write out all the database interaction code along with all the different API endpoints. Once we understand how the framework works, and what code we get for free as a result of using framework calls, the amount of code we have to write is greatly reduced.
I didn’t do much else with Django or Ember today. It was kind of a strange day that started out with me reading a big chunk of Ryan Holiday’s new book called Perennial Seller. Just a little re-ordering of my day, since I normally read in the afternoons/evenings. Perhaps I should have just stuck to my normal routine instead of mixing it up.