Interview question
How do you handle GET and POST request data in Django views? Django views में GET और POST request data कैसे handle करें?
Answer
| Data source | Access via | Typical use |
|---|---|---|
| Query string (?key=value) | request.GET | Search, filters, pagination |
| Form-encoded POST body | request.POST | Traditional HTML form submissions |
| JSON request body | json.loads(request.body) | API requests from JS/mobile clients |
| URL path segments | View function/method arguments | Resource identifiers (pk, slug) |
import json
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
# GET parameters - from the query string
def search_books(request):
query = request.GET.get('q', '') # returns '' if 'q' isn't present
page = request.GET.get('page', 1)
books = Book.objects.filter(title__icontains=query)
return render(request, 'search.html', {'books': books, 'query': query})
# URL: /search/?q=django&page=2
# POST data - from a traditional form submission
def create_book(request):
if request.method == 'POST':
title = request.POST.get('title')
price = request.POST.get('price')
Book.objects.create(title=title, price=price)
return redirect('book-list')
return render(request, 'book_form.html')
# request.FILES - for uploaded files (separate from request.POST)
def upload_cover(request):
if request.method == 'POST':
cover_file = request.FILES.get('cover')
book = Book.objects.get(pk=request.POST.get('book_id'))
book.cover = cover_file
book.save()
# JSON body - common for API-style endpoints
@csrf_exempt # only needed if CSRF middleware would otherwise block this
def api_create_book(request):
if request.method == 'POST':
data = json.loads(request.body) # request.POST is EMPTY for JSON bodies
book = Book.objects.create(title=data['title'], price=data['price'])
return JsonResponse({'id': book.id, 'title': book.title}, status=201)
# Checking the HTTP method explicitly
def flexible_view(request):
if request.method == 'GET':
return handle_get(request)
elif request.method == 'POST':
return handle_post(request)
return HttpResponseNotAllowed(['GET', 'POST'])| Data source | Access | Use |
|---|---|---|
| Query string | request.GET | Search, filters |
| Form POST body | request.POST | HTML forms |
| JSON body | json.loads(request.body) | API requests |
| URL path segments | View arguments | Resource IDs |
import json
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
def search_books(request):
query = request.GET.get('q', '')
page = request.GET.get('page', 1)
books = Book.objects.filter(title__icontains=query)
return render(request, 'search.html', {'books': books, 'query': query})
def create_book(request):
if request.method == 'POST':
title = request.POST.get('title')
price = request.POST.get('price')
Book.objects.create(title=title, price=price)
return redirect('book-list')
return render(request, 'book_form.html')
def upload_cover(request):
if request.method == 'POST':
cover_file = request.FILES.get('cover')
book = Book.objects.get(pk=request.POST.get('book_id'))
book.cover = cover_file
book.save()
@csrf_exempt
def api_create_book(request):
if request.method == 'POST':
data = json.loads(request.body)
book = Book.objects.create(title=data['title'], price=data['price'])
return JsonResponse({'id': book.id, 'title': book.title}, status=201)Was this answer clear?