guide_to_django_request_object
guide_to_django_request_object
Key Attributes:
• request.method: Indicates the HTTP method (GET, POST, etc.).
• request.path: The full path of the URL requested (e.g., /search).
• request.GET: A dictionary-like object containing GET parameters (query
strings).
• request.POST: Contains form data sent via POST.
• request.FILES: Handles uploaded files.
• request.headers: Access HTTP headers.
• request.is_secure(): Returns True if the request was made over
HTTPS.
Example:
def demo_request(request):
print(f"Method: {request.method}")
print(f"Path: {request.path}")
print(f"Is Secure: {request.is_secure()}")
return HttpResponse("Request details logged.")
2. GET Requests
GET requests are typically used to fetch data. Query parameters in the URL
are stored in request.GET.
Key Methods:
• request.GET.get(key, default): Fetch a single parameter, returning a
default if missing.
• request.GET.getlist(key): Fetch multiple values for the same parame-
ter.
• dict(request.GET.items()): Convert GET parameters to a dictionary.
Example:
1
def handle_get_request(request):
name = request.GET.get('name', 'Guest')
interests = request.GET.getlist('interest')
return JsonResponse({'name': name, 'interests': interests})
Usage: /example?name=John&interest=reading&interest=travel
Response:
{
"name": "John",
"interests": ["reading", "travel"]
}
3. POST Requests
POST requests are used to send data to the server, commonly for creating or
updating resources.
Key Methods:
• request.POST.get(key, default): Access form data.
• request.POST.getlist(key): Retrieve multiple values.
Example:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def handle_post_request(request):
if request.method == 'POST':
username = request.POST.get('username')
options = request.POST.getlist('options')
return JsonResponse({'username': username, 'options': options})
return HttpResponse(status=405)
Usage: Post form data like:
<form method="post">
<input type="text" name="username">
<input type="checkbox" name="options" value="opt1">
<input type="checkbox" name="options" value="opt2">
<button type="submit">Submit</button>
</form>
2
4. Handling File Uploads
File uploads are stored in the request.FILES object, allowing you to process
and save uploaded files.
Key Methods:
• request.FILES.get(key): Access a single uploaded file.
• request.FILES.getlist(key): Access multiple uploaded files.
Example:
def file_upload(request):
if request.method == 'POST':
uploaded_file = request.FILES.get('file')
if uploaded_file:
with open(f'/tmp/{uploaded_file.name}', 'wb') as f:
for chunk in uploaded_file.chunks():
f.write(chunk)
return JsonResponse({'message': 'File uploaded successfully'})
return HttpResponse(status=405)
Form:
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file">
<button type="submit">Upload</button>
</form>
5. Session Handling
Django sessions allow you to store and retrieve per-user data across requests.
Key Methods:
• request.session[key] = value: Set session data.
• request.session.get(key, default): Retrieve session data.
• request.session.set_expiry(seconds): Set session expiration.
• request.session.flush(): Clear all session data.
Example:
def session_example(request):
if 'visits' not in request.session:
request.session['visits'] = 0
request.session['visits'] += 1
3
request.session.set_expiry(300) # Expire in 5 minutes
return JsonResponse({'visits': request.session['visits']})
6. Comprehensive Example
Combining these concepts into a single example for managing a user profile
update with files and sessions.
from django.contrib.auth.decorators import login_required
@login_required
def update_profile(request):
if request.method == 'POST':
# Handle form data
username = request.POST.get('username', request.user.username)
request.user.username = username
# Update session
request.session['profile_updated'] = True
request.session.set_expiry(3600)
# GET request
return render(request, 'update_profile.html', {
'username': request.user.username,
'session_data': request.session.get('profile_updated', False)
})
Template:
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="text" name="username" value="{{ username }}">
<input type="file" name="profile_picture">
<button type="submit">Update</button>
</form>
4
Best Practices:
1. Validation: Always validate data from GET and POST requests.
2. Security:
• Use csrf_token for POST forms.
• Restrict file types and sizes during uploads.
3. Sessions: Avoid storing large or sensitive data directly in sessions.
4. Error Handling: Use try-except blocks to handle invalid input gracefully.