Django 教程(深入浅出)

Django 教程:从零开始搭建你的第一个 Web 项目

你是否曾想过,自己也能做出一个功能完整、界面清爽的网站?不用等团队,也不用依赖复杂工具。今天,我们就来手把手带你用 Django 搭建你的第一个 Web 项目。无论你是编程新手,还是已经接触过其他框架的开发者,这篇 Django 教程 都会帮你打通从“会写代码”到“能建网站”的最后一公里。

Django 是一个用 Python 编写的高级 Web 框架,它遵循“约定优于配置”的原则,让你能快速开发出稳定、可维护的 Web 应用。它内置了用户认证、数据库操作、表单处理、后台管理等功能,就像是一个“全副武装”的开发助手。

想象一下:你不需要从零造轮子,而是站在一个成熟的框架基础上,专注业务逻辑的实现。这就是 Django 的魅力所在。


安装 Django 与初始化项目

在开始之前,确保你的电脑上已经安装了 Python 3.8 或更高版本。你可以通过以下命令检查:

python --version

如果未安装,建议使用 Python 官方下载页面 安装。

接下来,我们使用 pip 安装 Django。打开终端或命令行工具,执行:

pip install django

安装完成后,验证是否成功:

django-admin --version

你应该看到类似 4.2.7 的版本号,说明安装成功。

现在,创建你的第一个 Django 项目。假设项目名为 myblog

django-admin startproject myblog

这条命令会生成一个包含多个文件和目录的项目结构。其中最核心的是:

  • manage.py:Django 的命令行工具,用于启动服务器、创建应用、运行测试等。
  • myblog/:项目的配置文件夹,包含 settings.py(设置)、urls.py(路由)等。

进入项目目录:

cd myblog

启动开发服务器:

python manage.py runserver

打开浏览器,访问 http://127.0.0.1:8000,你会看到 Django 的欢迎页面。恭喜!你的第一个 Django 项目已经跑起来了。


创建应用:模块化开发的核心思想

在 Django 中,一个项目可以包含多个“应用”(App)。每个应用负责一个特定功能,比如用户管理、文章发布、评论系统等。这种设计让项目结构清晰,便于维护。

我们来创建一个名为 blog 的应用:

python manage.py startapp blog

执行后,你会在项目根目录下看到新增的 blog/ 文件夹,里面包含:

  • models.py:定义数据库模型
  • views.py:处理请求和返回响应
  • urls.py:定义该应用的 URL 路由
  • admin.py:注册模型到后台管理界面

✅ 小贴士:把“应用”想象成一个独立的“功能模块”,就像乐高积木。你可以在一个项目里拼接多个应用,组合出复杂系统。


数据库模型设计:用代码定义数据结构

Django 的强大之处在于它提供了“ORM”(对象关系映射)机制。你不需要写 SQL 语句,而是用 Python 代码来定义数据库表。

打开 blog/models.py,我们来定义一个简单的“文章”模型:

from django.db import models

class Article(models.Model):
    # 文章标题,最大长度为 200 个字符,不能为空
    title = models.CharField(max_length=200, verbose_name="文章标题")

    # 文章正文,使用文本字段,支持大段内容
    content = models.TextField(verbose_name="文章内容")

    # 创建时间,自动记录当前时间
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")

    # 更新时间,每次保存时自动更新
    updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间")

    # 定义在后台管理界面中显示的名称
    def __str__(self):
        return self.title  # 返回标题作为对象的字符串表示

✅ 注释说明:

  • CharField 用于存储短文本,如标题
  • TextField 用于长文本,如文章正文
  • DateTimeField 用于时间字段,auto_now_add 表示首次创建时记录时间,auto_now 表示每次保存都更新时间
  • __str__ 方法让 Django 在管理后台显示有意义的文本

定义完模型后,需要生成数据库迁移文件并应用到数据库:

python manage.py makemigrations

这会根据模型变化生成一个迁移文件,记录数据库的变更。

然后执行:

python manage.py migrate

这一步将迁移文件应用到数据库,真正创建表。


编写视图与 URL 路由:让页面“动”起来

现在数据库有了,下一步是让网页能访问这些数据。在 Django 中,视图(View)是处理请求和返回响应的函数或类。

打开 blog/views.py,添加一个视图函数:

from django.shortcuts import render
from django.http import HttpResponse
from .models import Article  # 导入刚刚定义的 Article 模型

def index(request):
    # 从数据库中获取所有文章,按创建时间倒序排列
    articles = Article.objects.all().order_by('-created_at')
    
    # 渲染模板,并将文章数据传入
    return render(request, 'blog/index.html', {'articles': articles})

✅ 注释说明:

  • render() 函数用于加载 HTML 模板,并将数据传递给模板
  • Article.objects.all() 是 ORM 查询语句,获取所有文章
  • order_by('-created_at') 表示按创建时间降序排列,最新的在最前面

接下来,配置 URL 路由。在 blog/urls.py 中添加:

from django.urls import path
from . import views

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

然后在主项目 myblog/urls.py 中包含这个应用的路由:

from django.contrib import admin
from django.urls import path, include  # include 用于包含其他应用的路由

urlpatterns = [
    path('admin/', admin.site.urls),  # Django 默认后台管理路径
    path('blog/', include('blog.urls')),  # 将 /blog/ 开头的请求交给 blog 应用处理
]

现在访问 http://127.0.0.1:8000/blog/,你应该能看到页面报错:“模板未找到”。

这是因为我们还没有创建模板文件。


创建模板:HTML 与 Django 的连接桥梁

Django 使用模板系统来渲染 HTML 页面。创建目录结构:

myblog/
├── blog/
│   ├── templates/
│   │   └── blog/
│   │       └── index.html

templates/blog/index.html 中写入:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>我的博客</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .article { border: 1px solid #ccc; margin-bottom: 20px; padding: 15px; }
        .title { font-size: 1.5em; color: #333; }
        .date { color: #666; font-size: 0.9em; }
    </style>
</head>
<body>
    <h1>文章列表</h1>

    <!-- 遍历文章列表 -->
    {% for article in articles %}
        <div class="article">
            <h2 class="title">{{ article.title }}</h2>
            <p class="date">发布时间:{{ article.created_at }}</p>
            <p>{{ article.content|truncatewords:30 }}</p>
        </div>
    {% endfor %}

    <!-- 如果没有文章 -->
    {% if not articles %}
        <p>暂无文章,快去写一篇吧!</p>
    {% endif %}
</body>
</html>

✅ 注释说明:

  • {% for %} 是 Django 模板的循环语法,用于遍历列表
  • {{ }} 用于输出变量内容,如 article.title
  • |truncatewords:30 是过滤器,截取前 30 个单词
  • {% if %} 是条件判断,判断是否有文章

现在刷新页面,你应该能看到文章列表了!虽然目前还空空如也,但结构已经完整。


后台管理:快速添加文章内容

Django 提供了强大的后台管理界面,让你无需编写前端页面就能管理数据。

首先,打开 blog/admin.py,注册你的模型:

from django.contrib import admin
from .models import Article

admin.site.register(Article)

然后创建一个超级用户,用于登录后台:

python manage.py createsuperuser

按照提示输入用户名、邮箱和密码(建议密码复杂些)。

完成之后,启动服务器:

python manage.py runserver

访问 http://127.0.0.1:8000/admin/,使用你创建的账号登录。

你会看到“Article”选项,点击进入后可以添加、编辑、删除文章。

✅ 小技巧:你也可以自定义后台显示字段、搜索框、筛选条件,让管理更高效。


总结与下一步建议

通过这篇 Django 教程,你已经完成了从环境搭建、模型设计、视图路由到模板渲染和后台管理的全流程。你不仅学会了如何用 Python 构建一个完整的 Web 应用,更重要的是理解了 Django 的核心设计思想:模块化、可扩展、开箱即用

现在,你可以尝试以下进阶操作:

  • 添加用户注册与登录功能(使用 Django 自带的 auth 模块)
  • 为文章添加分类和标签
  • 使用 Bootstrap 或 Tailwind CSS 美化页面
  • 部署到云服务器(如阿里云、腾讯云、Vercel)

记住,每一个大项目都是从一个“Hello, World”开始的。你已经迈出了最关键的一步。

继续写代码,继续做项目。当你再次打开浏览器,看到自己亲手搭建的网站运行时,那种成就感,是任何语言都无法替代的。

愿你在 Django 的世界里,越走越远。