Django

Python Batteries-Included Web-Framework - ORM, Admin-Panel, Auth und Sicherheit von Anfang an integriert

TL;DR

Eine Zeile: Django ist Pythons Batteries-Included Web-Framework - alles was Sie brauchen, sofort einsatzbereit.

Kernstärken:

  • Admin-Panel - ein vollständiges CMS kostenlos
  • ORM - Datenbankoperationen ohne SQL
  • Sicherheit - CSRF, XSS, SQL-Injection-Schutz eingebaut
  • Django 6.0 - Template-Partials, Hintergrund-Tasks, CSP-Unterstützung

Core Concepts

Concept 1: MTV Pattern

Django verwendet Model-Template-View (MTV), ähnlich wie MVC:

Model     → Datenbankstruktur (Python-Klassen)
Template  → HTML mit Django-Template-Sprache
View      → Geschäftslogik, verbindet Models mit Templates

Concept 2: ORM

Definieren Sie Ihr Datenbankschema als Python-Klassen. Django kümmert sich um das SQL.

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    published = models.DateTimeField(auto_now_add=True)

# Verwendung - kein SQL nötig
Article.objects.all()
Article.objects.filter(title__contains='Django')
Article.objects.create(title='Hello', content='World')

Concept 3: URL → View → Template

Anfragen fließen durch URLs zu Views, die Templates rendern:

# urls.py
urlpatterns = [path('articles/', views.article_list)]

# views.py
def article_list(request):
    articles = Article.objects.all()
    return render(request, 'articles.html', {'articles': articles})

Quick Start

Install and Create Project

pip install django
django-admin startproject mysite
cd mysite
python manage.py runserver

Project Structure

mysite/
├── mysite/
│   ├── settings.py    # Konfiguration
│   ├── urls.py        # URL-Routing
│   └── wsgi.py        # WSGI-Einstiegspunkt
├── manage.py          # CLI-Tool
└── db.sqlite3         # Standard-Datenbank

Create an App

python manage.py startapp blog

Minimal Example

# blog/views.py
from django.http import JsonResponse

def hello(request):
    return JsonResponse({'message': 'Hello Django!'})

# mysite/urls.py
from django.urls import path
from blog import views

urlpatterns = [
    path('hello/', views.hello),
]

Run

python manage.py runserver
# Öffne http://localhost:8000/hello/

Gotchas

Don’t forget to add apps to INSTALLED_APPS

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    ...
    'blog',  # Ihre App
]

Migrations are required after model changes

# Nach Änderungen an models.py
python manage.py makemigrations  # Migrationsdatei erstellen
python manage.py migrate         # Auf Datenbank anwenden

CSRF token required for POST forms

<form method="POST">
    {% csrf_token %}
    <input type="text" name="title">
    <button type="submit">Absenden</button>
</form>

Static files need configuration

# settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']

# Template
{% load static %}
<img src="{% static 'logo.png' %}">

When to Use

Am besten für:

  • Inhaltsreiche Websites (Nachrichten, Blogs)
  • Admin-lastige Anwendungen
  • Schnelles Prototyping mit Python
  • Teams, die Konvention über Konfiguration bevorzugen

Nicht ideal für:

  • Microservices (FastAPI verwenden)
  • Echtzeit-Anwendungen (FastAPI + WebSockets verwenden)
  • Einfache REST-APIs (Django REST Framework erhöht Komplexität)

Vergleich:

FeatureDjangoFastAPIFlask
LernkurveMittelEinfachEinfach
Eingebaute FeaturesVieleWenigeMinimal
Admin-PanelJaNeinNein
Async-UnterstützungTeilweiseVollständigBegrenzt

Next Steps

Cheatsheet

BefehlBeschreibung
django-admin startproject nameProjekt erstellen
python manage.py startapp nameApp erstellen
python manage.py runserverDev-Server starten
python manage.py makemigrationsMigrationen erstellen
python manage.py migrateMigrationen anwenden
python manage.py createsuperuserAdmin-Benutzer erstellen
python manage.py shellPython-Shell mit Django
python manage.py testTests ausführen