Django 简介(长文讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言:为什么选择 Django?

在 Web 开发领域,Django 是一个备受推崇的 Python 框架,它以“速成、可扩展、安全”为核心优势,帮助开发者高效构建高质量的 Web 应用。无论是初创公司的 MVP(最小可行产品)还是大型企业的复杂系统,Django 都能提供一套经过实践验证的解决方案。本文将从零开始,逐步解析 Django 的核心设计理念、工作流程,并通过实际案例演示其开发过程。


Django 的核心设计理念:MTV 架构与开发哲学

1. MTV 架构:模块化设计的艺术

Django 采用 MTV(Model-Template-View)架构,与传统的 MVC(Model-View-Controller)模式有相似之处,但更注重分工明确的模块化设计。这一架构通过三个核心组件实现职责分离:

组件职责比喻
Model数据库交互与业务逻辑数据库的“翻译官”,将数据库操作转化为 Python 对象
Template用户界面渲染网站的“设计师”,负责页面布局与样式
View业务流程控制网站的“导演”,协调 Model 和 Template 的协作

比喻解析

  • Model 类似于一个翻译官,它将复杂的 SQL 语句转化为 Python 对象的简单操作,例如 User.objects.create(username="alice") 会自动生成对应的 SQL 语句。
  • View 则像导演,它根据用户的请求(如点击按钮)决定调用哪个 Model 方法,并选择哪个 Template 渲染结果。
  • Template 是设计师,它专注于页面的外观,例如使用 {% for %} 循环渲染文章列表,但不会处理数据查询或业务逻辑。

2. DRY 原则:避免重复劳动

Django 遵循 DRY(Don’t Repeat Yourself)原则,通过内置组件和扩展库减少代码冗余。例如:

  • 自动管理后台:只需定义 Model,Django 就能自动生成一个可管理的后台系统。
  • ORM(对象关系映射):开发者无需编写 SQL 语句,直接通过 Python 代码操作数据库。
  • 中间件(Middleware):统一处理请求和响应,如用户认证或性能监控。

Django 的开发流程:从项目创建到部署

1. 创建第一个 Django 项目

安装 Django 后,通过以下命令创建新项目:

django-admin startproject myproject
cd myproject

此时项目结构如下:

myproject/
├── manage.py    # 项目管理工具
├── myproject/    # 项目配置目录
│   ├── __init__.py
│   ├── settings.py  # 配置文件
│   ├── urls.py      # URL 路由配置
│   └── wsgi.py      # 部署配置

2. 构建一个简单的博客应用

步骤 1:创建应用

python manage.py startapp blog

步骤 2:定义 Model(数据库模型)

blog/models.py 中定义文章模型:

from django.db import models

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

    def __str__(self):
        return self.title

步骤 3:生成并执行迁移

python manage.py makemigrations
python manage.py migrate

步骤 4:创建视图与 URL 路由

blog/views.py 中编写视图函数:

from django.shortcuts import render
from .models import Article

def article_list(request):
    articles = Article.objects.all()
    return render(request, 'blog/article_list.html', {'articles': articles})

在项目根目录的 urls.py 中配置路由:

from django.urls import path, include
from blog import views

urlpatterns = [
    path('blog/', views.article_list, name='article_list'),
]

步骤 5:编写模板

blog/templates/blog/article_list.html 中创建 HTML 模板:

<!DOCTYPE html>
<html>
<head>
    <title>文章列表</title>
</head>
<body>
    <h1>所有文章</h1>
    <ul>
        {% for article in articles %}
            <li>{{ article.title }} - {{ article.created_at }}</li>
        {% empty %}
            <li>暂无文章</li>
        {% endfor %}
    </ul>
</body>
</html>

步骤 6:运行开发服务器

python manage.py runserver

访问 http://localhost:8000/blog/,即可看到渲染后的文章列表页面。


Django 的核心功能详解

1. ORM(对象关系映射):数据库交互的瑞士军刀

Django 的 ORM 允许开发者通过 Python 代码直接操作数据库,无需编写 SQL 语句。例如:

article = Article(title="第一篇文章", content="欢迎使用 Django!")
article.save()

all_articles = Article.objects.all()

recent_articles = Article.objects.filter(created_at__year=2023)

article = Article.objects.get(id=1)
article.title = "更新后的标题"
article.save()

优势

  • 跨数据库兼容性:支持 PostgreSQL、MySQL、SQLite 等多种数据库。
  • 自动事务管理:确保数据操作的原子性,避免部分成功、部分失败的情况。

2. URL 路由:灵活的请求分发系统

Django 的 URL 配置通过正则表达式或路径转换器(Path Converters)映射 URL 到视图函数。例如:

from django.urls import path
from . import views

urlpatterns = [
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
]

当访问 http://example.com/articles/2023/10/ 时,Django 会调用 month_archive 视图,并将 year=2023month=10 作为参数传递。

3. 模板系统:安全且灵活的界面渲染

Django 模板支持变量、标签(Tags)和过滤器(Filters),例如:

<!-- 显示文章内容,自动转义 HTML 标签 -->
<p>{{ article.content|safe }}</p>

<!-- 循环遍历文章列表 -->
{% for article in articles %}
    <h2>{{ article.title }}</h2>
    <p>{{ article.content }}</p>
{% endfor %}

<!-- 继承模板 -->
{% extends "base.html" %}
{% block content %}
    <div class="article-detail">{{ article.content }}</div>
{% endblock %}

安全机制
Django 默认对模板中的变量进行 HTML 转义,防止 XSS(跨站脚本攻击)。若需渲染原始 HTML,需使用 |safe 过滤器。


Django 的进阶特性与最佳实践

1. 中间件(Middleware):全局行为的钩子

中间件可以拦截请求或响应,在不修改视图的情况下实现通用功能。例如,一个简单的日志中间件:

class LoggingMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        print(f"处理请求:{request.path}")
        response = self.get_response(request)
        print(f"响应状态码:{response.status_code}")
        return response

settings.py 中启用:

MIDDLEWARE = [
    ...
    'myproject.middleware.LoggingMiddleware',
]

2. 表单与验证:结构化用户输入

Django 的表单系统支持字段验证、清洗和数据库保存。例如:

from django import forms
from .models import Article

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = ['title', 'content']

在视图中使用:

def create_article(request):
    if request.method == 'POST':
        form = ArticleForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('article_list')
    else:
        form = ArticleForm()
    return render(request, 'blog/create_article.html', {'form': form})

3. 分页与缓存:提升性能的实用工具

分页示例:

from django.core.paginator import Paginator

def article_list(request):
    articles = Article.objects.all()
    paginator = Paginator(articles, 5)  # 每页 5 条
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)
    return render(request, 'blog/article_list.html', {'page_obj': page_obj})

缓存配置:

settings.py 中启用缓存中间件:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    }
}

MIDDLEWARE = [
    ...
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
]

Django 的适用场景与社区生态

1. 典型应用场景

  • 内容管理系统(CMS):利用 Django 自带的 Admin 后台快速搭建文章、用户管理功能。
  • RESTful API 开发:结合 Django REST Framework 提供 API 支持。
  • 企业级应用:处理高并发、复杂业务逻辑(如电商、社交平台)。

2. 第三方扩展库:丰富生态的支撑

Django 生态包含大量第三方插件,如:

  • Django REST Framework:构建 API 的首选工具。
  • Celery:处理异步任务(如发送邮件、生成报表)。
  • Django AllAuth:集成社交账号登录(如 GitHub、微信)。

结论:Django 的价值与未来

Django 通过 MTV 架构、ORM、安全机制等特性,降低了 Web 开发的复杂度,同时保障了代码质量和系统性能。无论是新手入门还是企业级项目,Django 都提供了从开发到部署的一站式解决方案。随着 Python 生态的持续发展,Django 也将不断吸收新技术(如异步支持、静态站点生成),巩固其在 Web 开发领域的地位。

行动建议

  • 新手可从官方文档的“Django 教程”开始,逐步构建博客或电商项目。
  • 中级开发者可尝试优化现有项目,或探索 Django 的高级功能(如中间件、缓存策略)。

通过实践,你将亲身体验 Django 如何让 Web 开发变得高效、可靠且充满乐趣。

最新发布