= Django REST framework = * https://www.django-rest-framework.org/tutorial/quickstart/#quickstart Django REST framework is a powerful and flexible toolkit for building Web APIs. == Quickstart == * Based on https://www.django-rest-framework.org/tutorial/quickstart/#quickstart {{{#!highlight bash cd ~/tmp mkdir django-rest-test cd django-rest-test sudo apt install python3-venv python3 -m venv virtenv . virtenv/bin/activate pip install djangorestframework find . virtenv/ django-admin startproject tutorial . cd tutorial django-admin startapp quickstart cd .. python manage.py migrate # sync DB python manage.py createsuperuser --email admin@example.com --username admin # create super user, pwd: 12345678 nano tutorial/quickstart/serializers.py nano tutorial/quickstart/views.py nano tutorial/urls.py nano tutorial/settings.py python manage.py runserver # Starting development server at http://127.0.0.1:8000/ curl -H 'Accept: application/json; indent=4' -u admin:12345678 }}} === tutorial/quickstart/serializers.py === {{{#!highlight python from django.contrib.auth.models import User, Group from rest_framework import serializers class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User # select fields to return fields = ['url', 'username', 'email', 'groups'] class GroupSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Group # select fields to return fields = ['url', 'name'] }}} === tutorial/quickstart/views.py === {{{#!highlight python from django.contrib.auth.models import User, Group from rest_framework import viewsets from rest_framework import permissions from tutorial.quickstart.serializers import UserSerializer, GroupSerializer class UserViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer permission_classes = [permissions.IsAuthenticated] class GroupViewSet(viewsets.ModelViewSet): """ API endpoint that allows groups to be viewed or edited. """ queryset = Group.objects.all() serializer_class = GroupSerializer permission_classes = [permissions.IsAuthenticated] }}} === tutorial/urls.py === {{{#!highlight python from django.urls import include, path from rest_framework import routers from tutorial.quickstart import views router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) router.register(r'groups', views.GroupViewSet) # Wire up our API using automatic URL routing. # Additionally, we include login URLs for the browsable API. urlpatterns = [ path('', include(router.urls)), path('api-auth/', include('rest_framework.urls', namespace='rest_framework')) ] }}}