› Forums › Web Development › HarvardX: CS50W – CS50’s Web Programming with Python and JavaScript › CS50W – Lecture 3 – Django › Understanding Django Views, request, and render() — Beginner Friendly Guide
- This topic is empty.
-
AuthorPosts
-
March 3, 2026 at 9:42 am #6165
When learning Django, one of the first things you see is something like this:
# views.py from django.shortcuts import render def add(request): return render(request, "tasks/add.html")At first glance, it raises important questions:
- What is
request? - Who sends it?
- What does
render()return? - How does this function become a web page?
Let’s break it down step by step.
📂 Initial Project Context
Assume we have a Django app called
tasks.Our structure looks like this:
project/ │ ├── tasks/ │ ├── views.py │ ├── urls.py │ └── templates/ │ └── tasks/ │ └── add.html │ └── manage.py
🧩 Step 1: The View Function
Inside
views.py:from django.shortcuts import render def add(request): return render(request, "tasks/add.html")Important:
addis just a normal Python function.- It becomes a “view” only when connected to a URL.
requestis automatically provided by Django.
🌐 Step 2: Connecting It in
urls.pyInside
tasks/urls.py:from django.urls import path from . import views app_name = "tasks" urlpatterns = [ path("add/", views.add, name="add"), ]Now, when a user visits:
http://127.0.0.1:8000/add/Django:
- Matches
"add/"inurls.py - Calls
views.add(request) - Returns an HTTP response
Without this URL mapping, the function would never run.
📌 What Is
request?requestis an instance of:django.http.HttpRequestDjango automatically creates it when a browser sends a request.
It contains:
request.method→ “GET” or “POST”request.GET→ URL query datarequest.POST→ Form datarequest.user→ Logged-in userrequest.headers→ HTTP headersrequest.session→ Session data
Example:
if request.method == "POST": task = request.POST["task"]You never create the request object — Django injects it.
🔄 What Does
render()Do?When you write:
return render(request, "tasks/add.html")Django does three things:
- Loads the template
- Converts it to HTML
- Wraps it inside an
HttpResponse
Internally, it’s similar to:
from django.template.loader import get_template from django.http import HttpResponse template = get_template("tasks/add.html") html = template.render({}, request) return HttpResponse(html)So
render()returns:HttpResponse
🔁 Full Request–Response Flow
When a user visits
/add/:Browser ↓ Django server receives request ↓ Django creates HttpRequest object ↓ URL dispatcher checks urls.py ↓ Calls views.add(request) ↓ render() creates HttpResponse ↓ Django sends HTML back to browserDjango is fundamentally a:
Request → Process → Responsemachine.
📝 Example
add.html<h1>Add Task</h1> <form method="post"> {% csrf_token %} <input type="text" name="task"> <input type="submit" value="Add Task"> </form>Notice:
method="post"→ sends form data{% csrf_token %}→ required for security in Django
🔥 Why Django Requires
requestParameterIf you remove
request:def add():You’ll get an error:
TypeError: add() takes 0 positional arguments but 1 was givenBecause Django always calls:
add(request)Django controls the function call — not you.
🆚 Django vs Flask Routing Difference
In Flask:
@app.route("/add") def add(): return render_template("add.html")The decorator connects the route.
In Django:
views.py→ logicurls.py→ routing
Django separates concerns more strictly.
📚 Official Documentation (Highly Recommended)
Here are the most relevant official Django docs:
1️⃣ Writing Views
https://docs.djangoproject.com/en/stable/topics/http/views/
2️⃣ The HttpRequest Object
https://docs.djangoproject.com/en/stable/ref/request-response/#httprequest-objects
3️⃣ The HttpResponse Object
https://docs.djangoproject.com/en/stable/ref/request-response/#httpresponse-objects
4️⃣ URL Dispatcher
https://docs.djangoproject.com/en/stable/topics/http/urls/
5️⃣ Django Forms (Next Step)
https://docs.djangoproject.com/en/stable/topics/forms/
🎯 Key Takeaways
✔ A Django view is just a Python function
✔ It becomes accessible only viaurls.py
✔ Django automatically creates and passes therequestobject
✔render()returns anHttpResponse
✔ Django works as a Request–Response framework - What is
-
AuthorPosts
- You must be logged in to reply to this topic.
