-------------------------------------------------------------------------[Day 1]--------------------------------------------------------------------------
- Backend = brain of website 🧠
- It is not visible to users
- It:
- Receives requests
- Processes logic
- Talks to database
- Sends response
Flow:
Browser → Backend → Database → Backend → Browser
- Django = Python backend framework
- Tool to build backend faster
- Handles:
- Security
- URLs
- Database connection
- Admin panel
Django saves time and prevents common mistakes.
- Project = big container 📦
- One website = one project
- Holds:
- Settings
- URLs
- Apps
Created using:
django-admin startproject mysiteServer = program that listens 👂
Run server:
python manage.py runserverOpen:
http://127.0.0.1:8000/
127.0.0.1 = your computer 8000 = port (door number)
- App = small worker inside project 👷
- Each app does one job
- Example:
- Blog app
- Payment app
- Auth app
Create app:
python manage.py startapp blogAdd app to settings.py:
INSTALLED_APPS = [
...
'blog',
]Without registration:
- Django ignores app ❌
View = function that:
- Receives request
- Runs logic
- Returns response
Example:
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello")URL connects path → view
In urls.py:
from blog.views import hello
urlpatterns = [
path('hello/', hello),
]Flow:
URL → View → Response
Template = HTML page 🖼️ Used to send proper web pages.
In view:
return render(request, 'blog/hello.html')Browser only sees HTML.
Send dictionary:
data = {"name": "Dev"}
return render(request, 'blog/hello.html', data)In template:
{{ name }}View sends data. Template shows data.
Conditional:
{% if is_logged_in %} Welcome {% endif %}Loop:
{% for item in items %} {{ item }} {% endfor %}Template has small logic only.
Model = table blueprint 📊
Example:
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()Create table:
python manage.py makemigrations
python manage.py migrateModel = permanent storage 💾
Admin = control room 🎛️
Create superuser:
python manage.py createsuperuserRegister model:
from .models import Post
admin.site.register(Post)Open:
/admin/
Fetch in view:
posts = Post.objects.all()
return render(request, 'blog/post_list.html', {"posts": posts})In template:
{% for post in posts %} {{ post.title }} {% endfor %}Flow:
Model → View → Template
HTML form:
<form method="post">
{% csrf_token %}
<input name="title" />
</form>In view:
if request.method == "POST":
title = request.POST.get("title")
Post.objects.create(title=title)POST = sending data GET = asking for page
Create forms.py:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'content']In view:
form = PostForm(request.POST)
if form.is_valid():
form.save()Template:
{{ form.as_p }}Django handles:
- Validation
- Saving
- Error messages
Create:
blog/urls.py
from django.urls import path
from .views import post_list
urlpatterns = [
path('', post_list),
]Project urls.py:
path('posts/', include('blog.urls')),Project = main gate App = internal roads
Always remember:
Request
↓
URL
↓
View
↓
Model (optional)
↓
Template
↓
Response
That is Django’s heart ❤️