Django 简介(详细教程)

Django 简介:快速上手 Web 开发的利器

你是否曾想过,如何用一段代码搭建一个功能完整的网站?在 Python 生态中,Django 是最强大的 Web 框架之一。它不仅帮助开发者快速构建网站,还内置了数据库管理、用户认证、表单处理等核心功能,堪称“开箱即用”的典范。

Django 简介 中提到,它由英国程序员 Adrian Holovaty 和 Simon Willison 于 2005 年创建,最初是为了快速开发新闻网站而设计。如今,它已被广泛应用于 Instagram、Pinterest、Disqus 等大型平台。无论你是初学者,还是已有开发经验的中级开发者,Django 都能让你少写重复代码,专注业务逻辑。

想象一下:你正在开发一个博客系统。没有 Django,你需要手动处理数据库连接、用户登录、文章发布、URL 映射、模板渲染……这些工作加起来可能需要上百行代码。而有了 Django,只需几行配置,就能让整个系统跑起来。这就像你有了一个“全自动厨房”,只需要放食材,它就能帮你炒菜、煮饭、上菜。

Django 的核心设计哲学

Django 遵循“约定优于配置”(Convention over Configuration)的设计理念。这意味着框架已经为你设定了最佳实践,你只需遵循这些约定,就能高效开发。

比如,Django 要求项目中的每个应用(App)都有固定的目录结构,包括 models、views、templates、urls 等子目录。这种统一结构让团队协作更顺畅,也方便新成员快速上手。

Django 的另一个重要原则是“DRY”——Don’t Repeat Yourself(不要重复自己)。它通过模板系统、表单处理、模型抽象等方式,避免你在不同地方重复写相同逻辑。

举个例子,当你需要创建一个用户注册功能时,Django 提供了内置的 User 模型和 auth 模块,只需几行代码就能实现登录、注册、权限控制。你不需要从零开始写密码加密、会话管理这些复杂逻辑。

快速搭建你的第一个 Django 项目

我们来动手创建一个简单的“待办事项”应用,帮助你感受 Django 的强大之处。

首先,确保你已安装 Python 3.8 或更高版本。打开终端,执行以下命令:

python -m venv myproject_env

myproject_env\Scripts\activate
source myproject_env/bin/activate

pip install django==4.2.7

激活虚拟环境后,创建项目:

django-admin startproject todo_project

cd todo_project

现在,你有了一个基础项目结构。接下来,创建一个应用(App):

python manage.py startapp todo_app

此时,项目目录结构如下:

todo_project/
├── manage.py
├── todo_project/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── todo_app/
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── models.py
    ├── views.py
    └── urls.py

数据模型定义与数据库操作

在 Django 中,数据模型(Model)是与数据库表一一对应的。我们来定义一个待办事项模型。

打开 todo_app/models.py 文件,添加如下代码:

from django.db import models

class TodoItem(models.Model):
    # 标题字段,最大长度 200 个字符
    title = models.CharField(max_length=200)
    
    # 是否完成的布尔字段,默认为 False
    is_completed = models.BooleanField(default=False)
    
    # 创建时间,自动记录创建时刻
    created_at = models.DateTimeField(auto_now_add=True)
    
    # 重写 __str__ 方法,用于在后台管理界面显示对象名称
    def __str__(self):
        return self.title  # 返回标题作为对象描述

这段代码定义了一个简单的数据表:每条记录代表一个待办事项。CharField 用于文本,BooleanField 表示开关状态,DateTimeField 用于时间记录。

接下来,我们需要让 Django 知道这个模型要生成数据库表。执行以下命令:

python manage.py makemigrations

python manage.py migrate

Django 会自动创建一个 SQLite 数据库文件 db.sqlite3(默认使用 SQLite,适合开发阶段)。

创建视图与 URL 映射

视图(View)是处理请求并返回响应的函数或类。Django 的视图通常与 URL 路由绑定。

打开 todo_app/views.py,编写一个获取所有待办事项的视图:

from django.shortcuts import render
from django.http import HttpResponse
from .models import TodoItem

def todo_list(request):
    # 从数据库中查询所有未完成的待办事项
    todos = TodoItem.objects.filter(is_completed=False)
    
    # 将数据传递给模板,准备渲染
    context = {'todos': todos}
    
    # 渲染模板并返回响应
    return render(request, 'todo_app/todo_list.html', context)

注意:render 函数会查找 templates/todo_app/todo_list.html 文件。我们需要先创建这个模板。

todo_app/ 目录下创建 templates/todo_app/ 文件夹,然后创建 todo_list.html

<!-- todo_app/templates/todo_app/todo_list.html -->
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>待办事项</title>
</head>
<body>
    <h1>我的待办事项</h1>
    
    <!-- 遍历所有待办事项并显示 -->
    <ul>
        {% for todo in todos %}
            <li>{{ todo.title }} - {{ todo.created_at }}</li>
        {% endfor %}
    </ul>
    
    <!-- 添加新事项的链接 -->
    <a href="/add/">添加新事项</a>
</body>
</html>

最后,配置 URL 映射。打开 todo_app/urls.py,添加:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.todo_list, name='todo_list'),  # 访问 /todo_app/ 时调用 todo_list 视图
]

再在主项目 todo_project/urls.py 中包含子应用的 URL:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('todo/', include('todo_app.urls')),  # 将 /todo/ 开头的请求交给 todo_app 处理
]

启动开发服务器:

python manage.py runserver

访问 http://127.0.0.1:8000/todo/,你就能看到你的第一个 Django 页面了!

Django 的强大生态与扩展能力

Django 的魅力不仅在于核心功能,更在于其丰富的生态系统。通过第三方库,你可以轻松实现:

  • 用户认证扩展:django-allauth 支持邮箱、GitHub、Google 登录
  • API 接口开发:Django REST Framework 让你快速构建 RESTful API
  • 缓存优化:django-cacheops 提升查询性能
  • 静态文件管理:django-storages 集成 AWS S3、阿里云 OSS

这些工具都遵循 Django 的设计哲学,与框架无缝集成。

比如,要添加一个“完成事项”的功能,只需在视图中添加一条更新逻辑:

def complete_todo(request, todo_id):
    todo = TodoItem.objects.get(id=todo_id)
    todo.is_completed = True
    todo.save()
    return redirect('todo_list')

再配置一个 URL 路由,就能实现点击完成的交互。

总结:为什么选择 Django?

Django 简介 不仅是一段技术介绍,更是对开发效率的承诺。它适合:

  • 快速原型开发(MVP)
  • 内容管理系统(CMS)
  • 管理后台系统
  • 企业级 Web 应用

它的“全栈式”设计让你不必在各种库之间来回切换,从数据库到前端模板,一整套解决方案都已为你准备就绪。

更重要的是,Django 拥有活跃的社区和详尽的官方文档。遇到问题时,几乎总能找到答案。学习 Django,就是学习一种高效、规范、可维护的开发方式。

无论你是初学者,还是希望提升开发效率的中级开发者,Django 都值得你投入时间。从今天开始,动手搭建你的第一个项目吧。你会发现,Web 开发,原来可以这么简单而强大。