Back to snippets
django_rest_framework_user_group_api_with_viewsets.py
pythonA 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}