Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Question 6 of 9 · Django Views & URL Routing
Interview question

How do you handle GET and POST request data in Django views? Django views में GET और POST request data कैसे handle करें?

Answer
Data sourceAccess viaTypical use
Query string (?key=value)request.GETSearch, filters, pagination
Form-encoded POST bodyrequest.POSTTraditional HTML form submissions
JSON request bodyjson.loads(request.body)API requests from JS/mobile clients
URL path segmentsView function/method argumentsResource 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 sourceAccessUse
Query stringrequest.GETSearch, filters
Form POST bodyrequest.POSTHTML forms
JSON bodyjson.loads(request.body)API requests
URL path segmentsView argumentsResource 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?