Creating a Polls App with Django - A Comprehensive Guide
Introduction
Building a Polls app is a classic example in web development and an excellent way to learn Django. In this comprehensive guide, we'll walk through the process of creating a Polls app using Django. You'll learn how to set up the project, create models for polls and choices, build views and templates, and implement features such as voting and displaying results.
Prerequisites
Before you begin, make sure you have the following prerequisites in place:
- Django Installed: Ensure you have Django installed. You can install it using pip.
- Python Knowledge: Basic knowledge of Python programming is essential.
- HTML and CSS: Familiarity with HTML and CSS is recommended for building templates.
Step 1: Creating a Django Project
First, create a Django project to serve as the foundation for your Polls app.
Sample Project Creation
Use the following Django command to create a new project:
django-admin startproject polls_project
Step 2: Creating a Polls App
Within your Django project, create a new app specifically for the Polls functionality.
Sample App Creation
Use the following Django command to create a new app:
python manage.py startapp polls
Step 3: Defining Models
Define models for your polls and choices. You might have a model for polls and another for choices associated with each poll.
Sample Model Definition
Create models in your app's models.py file:
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
poll = models.ForeignKey(Poll, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
Step 4: Building Views and Templates
Create views and templates for your Polls app. You'll need views for listing polls, displaying poll details, and handling voting.
Sample View and Template
Create a view and its corresponding template for listing polls:
from django.shortcuts import render, get_object_or_404
from .models import Poll
def index(request):
latest_polls = Poll.objects.order_by('-pub_date')[:5]
return render(request, 'polls/index.html', {'latest_polls': latest_polls})
Step 5: Implementing Features
Implement features such as displaying poll details and handling user votes. You'll need views and templates for these actions.
Sample View for Voting
Create a view for voting in your app's views.py file:
def vote(request, poll_id):
poll = get_object_or_404(Poll, pk=poll_id)
try:
selected_choice = poll.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# Redisplay the poll voting form.
return render(request, 'polls/detail.html', {
'poll': poll,
'error_message': "You didn't select a choice.",
})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('polls:results', args=(poll.id,)))
Conclusion
Creating a Polls app in Django is an excellent way to practice your Django skills and develop a functional web application. This guide provides the knowledge and sample code to help you get started on your Polls project.