Django Overview
Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of web development, so you can focus on writing your app without needing to reinvent the wheel.
Key Features
- Batteries Included: Comes with many built-in features.
- ORM: Database access with Python code.
- Admin Interface: Automatic admin panel.
- URL Routing: Clean URL design.
- Templates: Powerful template language.
- Security: Protection against common vulnerabilities.
- Scalability: Handles high traffic well.
Common Use Cases
Content Management
Building CMS platforms and blogs.
E-Commerce
Online stores with complex business logic.
Social Networks
User-generated content platforms.
Data-Driven Apps
Applications with complex database interactions.
Example Code
# Django model example
from django.db import models
class BlogPost(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published_date = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
def __str__(self):
return self.title
# Django view example
from django.shortcuts import render, get_object_or_404
from .models import BlogPost
def post_list(request):
posts = BlogPost.objects.filter(published_date__isnull=False).order_by('-published_date')
return render(request, 'blog/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(BlogPost, pk=pk)
return render(request, 'blog/post_detail.html', {'post': post})
# Django URL configuration example
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
]
# Django template example (HTML)
"""
{% extends 'base.html' %}
{% block content %}
<h1>Blog Posts</h1>
{% for post in posts %}
<article>
<h2><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h2>
<p>Published: {{ post.published_date }}</p>
<p>{{ post.content|linebreaksbr }}</p>
</article>
{% endfor %}
{% endblock %}
"""