Function-Based Views

Python function that receives an HTTP request and returns an HTTP response.

FBVs are the simplest way to handle requests in Django and are ideal for beginners or small projects.

What is a View?

A view contains the business logic of your application. It processes user requests, interacts with models if needed, and returns a response.

User Request
      ↓
     View
      ↓
 User Response

Creating a Function-Based View

views.py

from django.http import HttpResponse

def home(request):
    return HttpResponse("Welcome to Django")

urls.py

from django.urls import path
from .views import home

urlpatterns = [
    path('', home),
]

When a user visits:

http://127.0.0.1:8000/

The home() function is executed and returns the response.

Understanding the Request Object

Every view receives a request object as its first parameter.

def home(request):
    return HttpResponse("Hello World")

The request object contains information such as:

  • HTTP method
  • User information
  • Session data
  • Request headers
  • Form data

Example:

def home(request):
    return HttpResponse(request.method)

Output:

GET

Returning HTML Response

from django.http import HttpResponse

def home(request):
    return HttpResponse("<h1>Welcome to Django</h1>")

Output:

<h1>Welcome to Django</h1>

Using Templates in FBV

views.py

from django.shortcuts import render

def home(request):
    return render(request, 'home.html')

home.html

<h1>Welcome to Django</h1>

The render() function loads the template and returns an HTTP response.

Passing Data to Templates

views.py

from django.shortcuts import render

def home(request):
    data = {
        'name': 'Tarun',
        'course': 'Django'
    }
    return render(request, 'home.html', data)

home.html

<h1>{{ name }}</h1>
<p>{{ course }}</p>

Output:

<h1>Tarun</h1>
<p>Django</p>

Handling GET Requests

from django.http import HttpResponse

def home(request):
    if request.method == 'GET':
        return HttpResponse("GET Request")

Handling POST Requests

from django.http import HttpResponse

def home(request):
    if request.method == 'POST':
        return HttpResponse("POST Request")

    return HttpResponse("GET Request")

Accessing Query Parameters

URL:

http://127.0.0.1:8000/?name=Tarun

View:

def home(request):
    name = request.GET.get('name')
    return HttpResponse(name)

Output:

Tarun

Accessing Form Data

def submit_form(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        return HttpResponse(name)

    return HttpResponse("Form Page")

Advantages of FBV

  • Easy to understand
  • Simple syntax
  • Better for small applications
  • Full control over logic

Disadvantages of FBV

  • Code repetition in large projects
  • Harder to maintain complex views
  • Less reusable than Class-Based Views