⚙️ Django Setup & Basics
# Install Django
pip install django
# Create project
django-admin startproject myproject
# Run development server
python manage.py runserver
# Create app
python manage.py startapp blog
# Add app in settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'blog',
]
📦 Models
# blog/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
# Apply migrations
python manage.py makemigrations
python manage.py migrate
🛠️ Admin Panel
# blog/admin.py
from django.contrib import admin
from .models import Post
admin.site.register(Post)
# Create superuser
python manage.py createsuperuser
👀 Views
# blog/views.py
from django.http import HttpResponse
from django.shortcuts import render
def home(request):
return HttpResponse("Hello, Django!")
def about(request):
return render(request, 'about.html')
🔗 URLs
# blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('about/', views.about, name='about'),
]
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
🎨 Templates
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / "templates"],
},
]
# blog/views.py
def home(request):
return render(request, 'home.html', {"name": "Maxon"})
# templates/home.html
<h1>Welcome, {{ name }}!</h1>
🖼️ Static & Media Files
# settings.py
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / "media"
# template usage
<link rel="stylesheet" href="{% static 'css/style.css' %}">
<img src="{{ MEDIA_URL }}profile.jpg" alt="Profile">
# load static in template
{% load static %}
🧮 ORM Queries
# Create
post = Post.objects.create(title="First Post", content="Hello World")
# Read
posts = Post.objects.all()
post = Post.objects.get(id=1)
# Filter
Post.objects.filter(title__contains="Hello")
# Update
post.title = "Updated Title"
post.save()
# Delete
post.delete()
🔐 Authentication
# settings.py
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
# urls.py
from django.contrib.auth import views as auth_views
urlpatterns = [
path('login/', auth_views.LoginView.as_view(), name="login"),
path('logout/', auth_views.LogoutView.as_view(), name="logout"),
]
# template (login.html)
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
🌐 Django REST Framework
# Install
pip install djangorestframework
# settings.py
INSTALLED_APPS = [
'rest_framework',
'blog',
]
# blog/serializers.py
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = '__all__'
# blog/views.py
from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
# myproject/urls.py
from rest_framework import routers
from blog.views import PostViewSet
router = routers.DefaultRouter()
router.register(r'posts', PostViewSet)
urlpatterns = [
path('api/', include(router.urls)),
]
💡 Pro Tips
# Debugging
python manage.py shell
# Create requirements file
pip freeze > requirements.txt
# Collect static files
python manage.py collectstatic
# Run tests
python manage.py test
# Deployment (Gunicorn + Nginx)
pip install gunicorn
gunicorn myproject.wsgi