+router = DefaultRouter()
+router.register(r'base_resource', ModelViewSet)
+urlpatterns = router.urls
+
+
+ Onde:
+ +base_resource
: é a URL base de acesso ao recurso;ModelViewSet
: é um ViewSet criado em cima do modelo.Para não precisar criar dois GETS, um POST, um PUT, + um PATCH e um DELETE.
+ViewSet define as funções para cada um dos verbos dentro do resource:
+ +list(self, request)
create(self, request)
retrieve(self, request, pk=None)
update(self, request, pk=None)
partial_update(self, request, pk=None)
destroy(self, request, pk=None)
Um ModelViewSet aplica as funções acima sobre um Model.
+ +
+class ProductViewSet(viewsets.ModelViewSet):
+ queryset = Product.objects.all()
+ serializer_class = ProductSerializer
+
+
+ Existe ainda ReadOnlyModelViewSet que só define as funções
+ list()
e retrieve()
.
Serializers definem campos de resultados e sua validação, + caso estejam sendo usados como entradas (assim como Forms + são usados para validar entradas de dados por forms).
+ +
+class UserSerializer(serializers.ModelSerializer):
+
+ class Meta:
+ model = Product
+ fields = ('name', 'price')
+
+ Vem com um serializador JSON como padrão, mas existem outros:
+ +djangorestframework-yaml
: Serializador/desserializador para YAML.djangorestframework-xml
: Serializador/desserializador para XML.
+{
+ "count": 1,
+ "next": null,
+ "previous": null,
+ "results": [
+ {
+ "url": "http://127.0.0.1:8000/users/1/",
+ "username": "jbiason",
+ "email": "",
+ "groups": []
+ }
+ ]
+
+
+count: 1
+next: null
+previous: null
+results:
+- email: ''
+ groups: []
+ url: http://127.0.0.1:8000/users/1/
+ username: jbiason
+
+
+
+1 http://127.0.0.1:8000/users/1/ jbiason
+
+ (Todos os casos, só foi alterado o header "Accept" no request; nenhuma + alteração de código -- com exceção do settings.py para ativar os + serializers.)
+