Form is web elment that allow user to input and submit data to server. For e.g. login form, registration form, contact form etc.
- GET: Used in getting[Fetching] data from server. Data is visible in URL.
- POST: Used in sending data to server. Data is hidden from URL. To send sensitive data like password, use POST.
A form in Django is a Python class that helps you to create HTML forms. It is used to:
- Collect user data [login, registration, contact form, feedback form]
- Automaic Validation
- Automatic Security
- Save data to database or process data further
- Create a new file forms.py in your app directory
- Import forms from django
- Create a class that inherits from forms.Form or forms.ModelForm
- Define fields in the form
- Use form in views.py
- Create a new file forms.py in your app directory
from django import forms
class FeedbackForm(forms.Form):
name = forms.CharField(max_length=100, label='Your Name')
email = forms.EmailField(label='Your Email')
phone = forms.CharField(max_length=15, label='Your Phone')
message = forms.CharField(widget=forms.Textarea, label='Your Message')Here CharField means text input, EmailField means email input, Textarea means textarea input.
- Use form in views.py
from django.shortcuts import render
from .forms import FeedbackForm
def feedback(request):
form = FeedbackForm()
return render(request, 'feedback.html', {'form': form})- Create a template feedback.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Feedback Form</title>
</head>
<body>
<h1>Feedback Form</h1>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
</body>
</html>- Add URL in urls.py
from django.urls import path
from . import views
urlpatterns = [
path('feedback/', views.feedback, name='feedback'),
]- Add URL in main urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('feedbackapp.urls')),
]- Make migration
python manage.py makemigrations- Apply migration
python manage.py migrate- Create superuser
python manage.py createsuperuser- In views.py
from django.shortcuts import render
def feedback(request):
form = FeedbackForm()
if request.method == 'POST':
form = FeedbackForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
email = form.cleaned_data['email']
phone = form.cleaned_data['phone']
message = form.cleaned_data['message']
print(name, email, phone, message)
return render(request, 'feedback.html', {'form': form})- Django form validation is done using is_valid() method.
- Create a model in models.py
from django.db import models
class Feedback(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
phone = models.CharField(max_length=15)
message = models.TextField()- Make migration and apply migration
python manage.py makemigrations
python manage.py migrate- Save form data to database
from django.shortcuts import render
from .forms import FeedbackForm
from .models import Feedback
def feedback(request):
form = FeedbackForm()
if request.method == 'POST':
form = FeedbackForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
email = form.cleaned_data['email']
phone = form.cleaned_data['phone']
message = form.cleaned_data['message']
Feedback.objects.create(name=name, email=email, phone=phone, message=message)
return render(request, 'feedback.html', {'form': form})from django.shortcuts import render
def feedback(request):
form = FeedbackForm()
if request.method == 'POST':
form = FeedbackForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
email = form.cleaned_data['email']
phone = form.cleaned_data['phone']
message = form.cleaned_data['message']
Feedback.objects.create(name=name, email=email, phone=phone, message=message)
return render(request, 'success.html')
return render(request, 'feedback.html', {'form': form})<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Success</title>
</head>
<body>
<h1>Thank You</h1>
<p>Your feedback has been submitted successfully.</p>
</body>
</html>- In admin.py
from django.contrib import admin
from .models import Feedback
admin.site.register(Feedback)Create Student Registration Form Using Django Forms Name, Email, Phone, Address, Subject, Message