Python: Add examples of class/function based views

This commit is contained in:
Rasmus Wriedt Larsen
2021-10-27 15:20:51 +02:00
committed by Rasmus Wriedt Larsen
parent 9bbf08ddcf
commit 095f896f95
2 changed files with 29 additions and 6 deletions

View File

@@ -11,5 +11,6 @@ router.register(r"bars", views.BarViewSet)
urlpatterns = [
path("", include(router.urls)),
path("api-auth/", include("rest_framework.urls", namespace="rest_framework")),
path("example/", views.example), # $routeSetup="example/"
path("class-based-view/", views.MyClass.as_view()), # $routeSetup="lcass-based-view/"
path("function-based-view/", views.function_based_view), # $routeSetup="function-based-view/"
]

View File

@@ -2,8 +2,13 @@ from .models import Foo, Bar
from .serializers import FooSerializer, BarSerializer
from rest_framework import viewsets
from rest_framework.decorators import api_view
from rest_framework.views import APIView
from rest_framework.request import Request
from rest_framework.response import Response
# Viewsets
# see https://www.django-rest-framework.org/tutorial/quickstart/
class FooViewSet(viewsets.ModelViewSet):
queryset = Foo.objects.all()
serializer_class = FooSerializer
@@ -13,8 +18,25 @@ class BarViewSet(viewsets.ModelViewSet):
queryset = Bar.objects.all()
serializer_class = BarSerializer
# class based view
# see https://www.django-rest-framework.org/api-guide/views/#class-based-views
# this is pure django
from django.http import HttpResponse, HttpRequest
def example(request: HttpRequest):
return HttpResponse("example")
class MyClass(APIView):
def initial(self, request, *args, **kwargs):
# this method will be called before processing any request
super().initial(request, *args, **kwargs)
def get(self, request):
return Response("GET request")
def post(self, request):
return Response("POST request")
# function based view
# see https://www.django-rest-framework.org/api-guide/views/#function-based-views
@api_view(["GET", "POST"])
def function_based_view(request: Request):
return Response({"message": "Hello, world!"})