Introduction to Django: A Comprehensive Beginner's Guide to Backend Web Development
Introduction to Django
Django is a high-level web application framework that develops web applications using Python. It promotes rapid development and clean pragmatic design.
Key Features of Django
Professional Design: Designed by seasoned developers to enhance the web creation process.
Efficiency: Reduces repetitive tasks so you don't have to recreate the same application from scratch.
Setting Up Django
First, you need to install Python on your machine before using Django. After acquiring Python, you can set up Django using pip:
pip install django
Creating a Django Project
A Django project is a set of settings for one Django instance. It consists of database configurations, Django-specific options, and application-specific settings.
Start a new project:
django-admin startproject myproject
cd myproject
Run the development server:
python manage.py runserver
Open your web browser and go to http://127.0.0.1:8000/
to see the default Django welcome page.
Creating a Django App
An application in Django carries out a particular task. This could be a blogging platform, a database of public records, or a polling application.
Start a new app:
python manage.py startapp myapp
Add the app to your project: In myproject/
settings.py
, add 'myapp'
to the INSTALLED_APPS
list:
INSTALLED_APPS = [
# other installed apps
'myapp',
]
Creating a Simple View
A view function takes a web request and returns a web response. This response can be HTML content, a redirect, a 404 error, an XML document, or an image.
Create a view in myapp/
views.py
:
from django.http import HttpResponse
def home(request):
return HttpResponse("Hello Django!")
Create a Python file urls.py
in myapp
Map the view to the URL in myapp/
urls.py
:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home')
]
Include the app's URLs in the project’s URLs in myproject/
urls.py
:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')),
]
Working with Templates
The template system offered by Django is straightforward and adaptable. The templates are in a directory called templates
within the application folder.
Create a templates
directory inside myapp
and add an index.html
file:
<!DOCTYPE html>
<html>
<head>
<title>My Django App</title>
</head>
<body>
<h1>Hello Django!</h1>
</body>
</html>
Modify settings.py
to include the templates
directory:
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'myapp', 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Update the view to use the template in myapp/
views.py
:
from django.shortcuts import render
def home(request):
return render(request, 'index.html')
Models and Databases
Models are the single definitive source of information about your data. They contain the essential fields and behaviors of the data you’re storing.
Define a model in myapp/
models.py
:
from django.db import models
class Weather(models.Model):
city = models.CharField(max_length=100)
temperature = models.FloatField()
description = models.CharField(max_length=100)
Create the database tables:
python manage.py makemigrations
python manage.py migrate
Django Admin
Django comes with a built-in admin interface that is highly customizable.
Create an admin user:
python manage.py createsuperuser
Register the model in myapp/
admin.py
:
from django.contrib import admin
from .models import Weather
admin.site.register(Weather)
Access the admin interface: Open your web browser and go to http://127.0.0.1:8000/admin/
.
Possible Errors and How to Resolve Them
When working with Django, you may encounter various errors. Here are some common ones and their solutions:
Command Not Found
Error:
django-admin: command not found
Solution: Ensure Django is installed using
pip install django
.
Server Not Running
Error:
That port is already in use.
Solution: Stop other processes using the port or change the port:
python manage.py runserver 8080
Template Not Found
Error:
TemplateDoesNotExist at /
Solution: Ensure the template path is correct and included in
TEMPLATES
settings insettings.py
.
Database Migration Errors
Error:
django.db.utils.OperationalError: no such table
Solution: Run migrations:
python manage.py makemigrations python manage.py migrate
Static Files Not Loading
- Solution: Ensure
STATIC_URL
andSTATICFILES_DIRS
are properly configured insettings.py
.
- Solution: Ensure
Form Data Not Valid
- Solution: Check form field names in the template and ensure they match the form definition in
forms.py
.
- Solution: Check form field names in the template and ensure they match the form definition in
404 Error for URL
- Solution: Ensure URL patterns are correctly defined and included in the project's
urls.py
.
- Solution: Ensure URL patterns are correctly defined and included in the project's
Admin Interface Errors
- Solution: Ensure models are registered in
admin.py
and the admin user is created.
- Solution: Ensure models are registered in
These common issues and their solutions should help you troubleshoot effectively while working with Django.
For more advanced features, in-depth explanations, detailed error messages, follow up this series and always check the Django documentation and community forums.
Subscribe to my newsletter
Read articles from Olatunde Emmanuel directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Olatunde Emmanuel
Olatunde Emmanuel
Hello! I'm a tech enthusiast who adores games, creativity, and writing. I'm venturing into game and software development, along with technical writing, while soaking up wisdom from industry experts. Let's collaborate and turn our tech passions into remarkable projects!