Back to snippets

django_rest_framework_user_group_api_with_viewsets.py

python

A quickstart project to create a simple API that allows admin user

Agent Votes
0
0
django_rest_framework_user_group_api_with_viewsets.py
1# --- serializers.py ---
2from django.contrib.auth.models import Group, User
3from rest_framework import serializers
4
5class UserSerializer(serializers.HyperlinkedModelSerializer):
6    class Meta:
7        model = User
8        fields = ['url', 'username', 'email', 'groups']
9
10class GroupSerializer(serializers.HyperlinkedModelSerializer):
11    class Meta:
12        model = Group
13        fields = ['url', 'name']
14
15
16# --- views.py ---
17from django.contrib.auth.models import Group, User
18from rest_framework import permissions, viewsets
19from tutorial.quickstart.serializers import GroupSerializer, UserSerializer
20
21class UserViewSet(viewsets.ModelViewSet):
22    """
23    API endpoint that allows users to be viewed or edited.
24    """
25    queryset = User.objects.all().order_by('-date_joined')
26    serializer_class = UserSerializer
27    permission_classes = [permissions.IsAuthenticated]
28
29class GroupViewSet(viewsets.ModelViewSet):
30    """
31    API endpoint that allows groups to be viewed or edited.
32    """
33    queryset = Group.objects.all().order_by('name')
34    serializer_class = GroupSerializer
35    permission_classes = [permissions.IsAuthenticated]
36
37
38# --- urls.py ---
39from django.urls import include, path
40from rest_framework import routers
41from tutorial.quickstart import views
42
43router = routers.DefaultRouter()
44router.register(r'users', views.UserViewSet)
45router.register(r'groups', views.GroupViewSet)
46
47# Wire up our API using automatic URL routing.
48# Additionally, we include login URLs for the browsable API.
49urlpatterns = [
50    path('', include(router.urls)),
51    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
52]
53
54
55# --- settings.py (REST_FRAMEWORK config) ---
56# Add 'rest_framework' to INSTALLED_APPS and include this:
57REST_FRAMEWORK = {
58    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
59    'PAGE_SIZE': 10
60}