Last Updated : 12 Jul, 2025
Django is often called a "Batteries Included Framework" because it provides built-in settings and features that help developers build websites rapidly and efficiently. One of the essential components in web development is handling HTML forms, a way for users to send data to the server for processing, such as saving it to a database or retrieving information.
What is an HTML Form?An HTML form is a collection of elements wrapped inside <form>...</form> tags. These elements allow visitors to input text, select options, manipulate controls, and submit data to the server. The server then processes this data, often involving database operations or other logic. Django fully supports all types of HTML forms and simplifies the rendering and processing of form data using views.
Django Forms vs. HTML FormsTo know more about HTML forms, visit HTML | form Tag.
Django provides a powerful feature called Django Forms that abstracts HTML forms and their handling. It’s similar in concept to Django Models, letting you define forms as Python classes. However, before diving into Django Forms, it’s important to understand the basics of GET and POST methods in standard HTML forms.
Understanding GET and POST Methods1. GET: This method appends form data to the URL as query parameters. For example, when you search in the Django documentation, the URL might look like:
https://docs.djangoproject.com/en/5.2/search/?q=forms
2. POST: This method sends the form data in the body of the HTTP request. POST is used when the request modifies data on the server, like updating a database.
Example: Rendering a Simple HTML Form in DjangoLet’s illustrate rendering forms in Django with a simple example. Suppose you have a Django project named geeksforgeeks with an app called geeks.
Step 1: Create the HTML FormCreate a template file home.html inside geeks/templates/ and add the following:
HTML
<form action="" method="get">
<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name">
<input type="submit" value="OK">
</form>
This form will send data using the GET method when submitted.
Step 2: Setup URL ConfigurationIn your app’s urls.py (geeks/urls.py), set up the URL pattern:
Python
from django.urls import path
from .views import home_view
urlpatterns = [
path('', home_view),
]
Step 3: Create the View
In views.py (geeks/views.py), create the view to render the form:
Python
from django.shortcuts import render
def home_view(request):
return render(request, "home.html")
Step 4: Run the Server and Test
Run your Django server:
Handling GET Request Data in Viewspython manage.py runserver
When you submit the form, the data will be appended to the URL. To access this data in the view, you can use request.GET:
Python
from django.shortcuts import render
def home_view(request):
print(request.GET) # Prints the submitted data as a QueryDict
return render(request, "home.html")
If you enter a name and submit the form, you will see the data printed in your terminal, like:
GET Requestrequest.GET returns a query dictionary that one can access like any other python dictionary and finally use its data for applying some logic.
Handling POST Requests in Django FormsTo use POST instead of GET, modify your form in home.html:
HTML
<form action="" method="POST">
{% csrf_token %}
<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name">
<input type="submit" value="OK">
</form>
Update the View to Handle POST DataNote: Django requires the {% csrf_token %} template tag inside all POST forms for security to prevent Cross-Site Request Forgery attacks.
Modify your view to handle POST data:
Python
from django.shortcuts import render
def home_view(request):
if request.method == "POST":
print(request.POST) # Prints the POSTed data as a QueryDict
name = request.POST.get('your_name')
return render(request, "home.html")
Now when we submit the form it shows the data as below:
POST RequestThis way one can use this data for querying into the database or for processing using some logical operation and pass using the context dictionary to the template.
Handling Post Request in Django
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4