Django is a high-level Python web framework used to build:
-
Web applications
-
APIs
-
Admin panels
-
Scalable backend systems
| Django | Flask |
|---|---|
| Batteries included | Micro framework |
| Built-in admin | No admin |
| ORM included | Optional |
| Slower to start | Faster to prototype |
๐ Use Django when:
-
You want structure
-
Youโre building real products
-
You donโt want to reinvent basics
-
Python 3.10+
-
pip
-
Virtual environment (recommended)
python --version
pip --versionMost beginners skip this โ dependency hell later.
python -m venv venvActivate:
Windows
venv\Scripts\activateMac/Linux
source venv/bin/activatepip install djangoVerify:
django-admin --versiondjango-admin startproject myproject
cd myprojectStructure:
myproject/
โโโ manage.py
โโโ myproject/
โ โโโ __init__.py
โ โโโ settings.py
โ โโโ urls.py
โ โโโ asgi.py
โ โโโ wsgi.py
-
settings.pyโ configuration -
urls.pyโ URL routing -
manage.pyโ command-line utility
python manage.py runserverVisit:
http://127.0.0.1:8000/
If this doesnโt work โ donโt proceed.
Project = entire system
App = feature/module
python manage.py startapp coreStructure:
core/
โโโ admin.py
โโโ apps.py
โโโ models.py
โโโ views.py
โโโ tests.py
โโโ migrations/
In settings.py:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'core', # add this
]from django.http import HttpResponse
def home(request):
return HttpResponse("Hello Django")from django.urls import path
from .views import home
urlpatterns = [
path('', home),
]myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('core.urls')),
]Browser โ urls.py โ views.py โ response
No magic. Just routing.
Create folder:
core/templates/
โโโ home.html
<!DOCTYPE html>
<html>
<head>
<title>Django</title>
</head>
<body>
<h1>Hello from Template</h1>
</body>
</html>from django.shortcuts import render
def home(request):
return render(request, 'home.html')Create:
core/static/core/style.css
body {
background: #f4f4f4;
}{% load static %}
<link rel="stylesheet" href="{% static 'core/style.css' %}">from django.db import models
class Student(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
email = models.EmailField(unique=True)
def __str__(self):
return self.namepython manage.py makemigrations
python manage.py migrateNever edit DB directly. Django owns it.
Create admin user:
python manage.py createsuperuserRegister model:
from django.contrib import admin
from .models import Student
admin.site.register(Student)Visit:
http://127.0.0.1:8000/admin
from django import forms
from .models import Student
class StudentForm(forms.ModelForm):
class Meta:
model = Student
fields = '__all__'from django.shortcuts import render, redirect
from .forms import StudentForm
def add_student(request):
form = StudentForm(request.POST or None)
if form.is_valid():
form.save()
return redirect('/')
return render(request, 'form.html', {'form': form})โ Not using virtual env
โ Forgetting to add app in INSTALLED_APPS
โ Editing DB manually
โ Mixing logic in templates
โ Ignoring migrations
| Layer | Responsibility |
|---|---|
| URLs | Routing |
| Views | Logic |
| Templates | UI |
| Models | Data |
| Forms | Validation |
-
Django ORM queries
-
Authentication system
-
Django REST Framework (DRF)
-
Deployment (Gunicorn + Nginx)
-
PostgreSQL
Django rewards discipline.
If youโre lazy with structure โ Django will punish you.
If you respect conventions โ Django scales beautifully.
If you want:
-
API-only Django
-
Django + React
-
Django REST Framework notes
-
Real-world project README
Say it directly.