Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
APIView for custom endpoints
📖 Scenario: You are building a simple Django REST API for a bookstore. You want to create a custom endpoint that returns a greeting message.
🎯 Goal: Create a Django APIView with a custom get method that returns a JSON response with a greeting message.
📋 What You'll Learn
Create a Django view class called GreetingView that inherits from APIView
Add a get method to GreetingView that returns a JSON response with {"message": "Hello, welcome to the bookstore!"}
Use Django REST framework's Response class to return the JSON data
Add a URL pattern for GreetingView at path "greet/"
💡 Why This Matters
🌍 Real World
Custom API endpoints let you create tailored responses for your web or mobile apps, like greeting messages or data queries.
💼 Career
Knowing how to build APIViews is essential for backend developers working with Django REST framework to create flexible APIs.
Progress0 / 4 steps
1
Import necessary classes
Import APIView from rest_framework.views and Response from rest_framework.response.
Django
Hint
Use from rest_framework.views import APIView and from rest_framework.response import Response.
2
Create GreetingView class
Create a class called GreetingView that inherits from APIView.
Django
Hint
Define class GreetingView(APIView): with no methods yet.
3
Add get method to GreetingView
Inside GreetingView, add a get method that takes self and request parameters and returns Response({"message": "Hello, welcome to the bookstore!"}).
Django
Hint
Define def get(self, request): and return the greeting message using Response.
4
Add URL pattern for GreetingView
In your Django urls.py, import GreetingView and add a URL pattern with path "greet/" that uses GreetingView.as_view().
Django
Hint
Import GreetingView and add path("greet/", GreetingView.as_view()) to urlpatterns.
Practice
(1/5)
1. What is the main purpose of using APIView in Django REST Framework?
easy
A. To automatically generate database tables.
B. To manage user authentication without coding.
C. To style HTML templates.
D. To create custom endpoints by defining methods like get() and post().
Solution
Step 1: Understand the role of APIView
APIView allows you to write custom logic for handling HTTP requests by defining methods like get() and post().
Step 2: Compare other options
Options A, C, and D describe unrelated tasks like database management, styling, or authentication without coding, which APIView does not do automatically.
Final Answer:
To create custom endpoints by defining methods like get() and post(). -> Option D
Quick Check:
APIView = custom HTTP methods [OK]
Hint: APIView is for custom HTTP methods like get/post [OK]
Common Mistakes:
Thinking APIView auto-generates database tables
Confusing APIView with template rendering
Assuming APIView manages authentication alone
2. Which of the following is the correct way to import APIView and Response in a Django REST Framework view?
easy
A. from django.views import APIView
from django.http import Response
B. from rest_framework.views import APIView
from rest_framework.response import Response
C. import APIView from rest_framework
import Response from rest_framework
D. from rest_framework.api import APIView
from rest_framework.api import Response
Solution
Step 1: Recall correct import paths
APIView is imported from rest_framework.views and Response from rest_framework.response.
Step 2: Check other options for errors
from django.views import APIView
from django.http import Response uses django.views and django.http which do not provide APIView or DRF Response. import APIView from rest_framework
import Response from rest_framework uses invalid import syntax. from rest_framework.api import APIView
from rest_framework.api import Response uses wrong module paths.
Final Answer:
from rest_framework.views import APIView
from rest_framework.response import Response -> Option B
Quick Check:
Correct import paths = from rest_framework.views import APIView
from rest_framework.response import Response [OK]
Hint: APIView from views, Response from response module [OK]
Common Mistakes:
Importing APIView from django.views
Using incorrect import syntax
Importing Response from wrong module
3. Given this APIView code, what will be the HTTP status code in the response?
from rest_framework.views import APIView
from rest_framework.response import Response
class HelloView(APIView):
def get(self, request):
return Response({"message": "Hello!"}, status=201)
medium
A. 201 Created
B. 404 Not Found
C. 200 OK
D. 500 Internal Server Error
Solution
Step 1: Identify the status code in Response
The Response is returned with status=201, which means Created.
Step 2: Match status code to HTTP meaning
201 means resource created successfully, so the response status will be 201 Created.
Final Answer:
201 Created -> Option A
Quick Check:
Status=201 means Created [OK]
Hint: Check status argument in Response call [OK]
Common Mistakes:
Assuming default 200 OK without checking status
Confusing 201 with 404 or 500
Ignoring the status parameter in Response
4. Identify the error in this APIView code snippet:
from rest_framework.views import APIView
from rest_framework.response import Response
class MyView(APIView):
def post(self, request):
data = request.data
return Response(data, status=200)
def get(self):
return Response({"msg": "Hello"})
medium
A. The get method is missing the request parameter.
B. The post method should not return a Response.
C. The status code 200 is invalid in Response.
D. request.data is not accessible in APIView.
Solution
Step 1: Check method signatures
In APIView, all HTTP methods must accept self and request parameters. The get method lacks the request parameter.
Step 2: Validate other statements
Returning Response in post is correct. Status 200 is valid. request.data is accessible in APIView.
Final Answer:
The get method is missing the request parameter. -> Option A
Quick Check:
All HTTP methods need request parameter [OK]
Hint: Check method parameters: self and request required [OK]
Common Mistakes:
Omitting request parameter in methods
Thinking status=200 is invalid
Believing request.data is unavailable
5. You want to create a custom APIView that accepts a POST request with JSON data containing a number, doubles it, and returns the result with status 200. Which code snippet correctly implements this?
hard
A. class DoubleView(APIView):
def get(self, request):
num = request.data.get('number')
result = num * 2
return Response({'result': result}, status=200)
B. class DoubleView(APIView):
def post(self, request):
num = request.data['number']
result = num + num
return Response({'result': result}, status=201)
C. class DoubleView(APIView):
def post(self, request):
num = request.data.get('number')
result = num * 2
return Response({'result': result}, status=200)
D. class DoubleView(APIView):
def post(self):
num = request.data.get('number')
result = num * 2
return Response({'result': result}, status=200)
Solution
Step 1: Check method and parameters
POST method must be defined with self and request parameters. class DoubleView(APIView):
def post(self, request):
num = request.data.get('number')
result = num * 2
return Response({'result': result}, status=200) correctly defines post(self, request).
Step 2: Validate data access and response
class DoubleView(APIView):
def post(self, request):
num = request.data.get('number')
result = num * 2
return Response({'result': result}, status=200) safely uses request.data.get('number') and multiplies by 2. It returns Response with status=200 as required.
Step 3: Review other options
class DoubleView(APIView):
def post(self, request):
num = request.data['number']
result = num + num
return Response({'result': result}, status=201) uses status=201 (wrong status). class DoubleView(APIView):
def get(self, request):
num = request.data.get('number')
result = num * 2
return Response({'result': result}, status=200) uses get method instead of post. class DoubleView(APIView):
def post(self):
num = request.data.get('number')
result = num * 2
return Response({'result': result}, status=200) misses request parameter in post method.
Final Answer:
class DoubleView(APIView):
def post(self, request):
num = request.data.get('number')
result = num * 2
return Response({'result': result}, status=200) -> Option C
Quick Check:
POST with request param, multiply, status=200 [OK]
Hint: POST method with request param, multiply, return status 200 [OK]