Django Python 全栈开发教程:从零开始构建你的博客
第一部分:Django 简介与环境准备
什么是 Django?
Django 是一个用 Python 编写的高级 Web 框架,它遵循 MVT (Model-View-Template) 架构模式,旨在帮助开发者快速、安全地构建复杂的数据库驱动的网站。

- M (Model - 模型): 定义你的数据结构,它就像你的数据库的“接口”,负责与数据库交互(增、删、改、查)。
- V (View - 视图): 处理业务逻辑,它接收来自用户的请求,与模型交互获取数据,然后选择一个模板来渲染并返回响应。
- T (Template - 模板): 负责展示,它是一个包含 HTML 代码和 Django 模板语言的文件,用于将动态数据插入到最终的网页中。
Django 的核心理念是 "Don't Repeat Yourself" (DRY),它提供了许多开箱即用的功能,如:
- ORM (Object-Relational Mapper): 无需写 SQL,用 Python 对象操作数据库。
- Admin 后台: 自动生成一个功能强大的网站管理界面。
- URL 路由: 优雅的 URL 设计。
- 模板引擎: 强大的模板继承和包含机制。
- 安全性: 内置了防止常见 Web 攻击(如 CSRF、XSS、SQL 注入)的功能。
环境准备
在开始之前,请确保你的电脑上已安装 Python,我们推荐使用虚拟环境来隔离项目依赖,避免版本冲突。
步骤 1: 创建项目目录
mkdir django_blog cd django_blog
步骤 2: 创建并激活虚拟环境

- macOS / Linux:
python3 -m venv venv source venv/bin/activate
- Windows:
python -m venv venv .\venv\Scripts\activate
激活后,你的命令行提示符前会出现
(venv)。
步骤 3: 安装 Django
pip install django
步骤 4: 验证安装
django-admin --version
第二部分:创建你的第一个 Django 项目
使用 startproject 命令
Django 提供了命令行工具来快速生成项目骨架。

# 在 django_blog 目录下执行 django-admin startproject myblog .
这个命令会创建一个名为 myblog 的目录,里面包含了项目的核心配置文件,注意最后的点 ,表示在当前目录下创建,避免产生多余的嵌套目录。
你的项目结构现在应该是这样的:
django_blog/
├── venv/
└── myblog/
├── manage.py # 命令行工具,用于与项目交互
└── myblog/ # 项目包
├── __init__.py
├── asgi.py # 用于部署的服务器接口
├── settings.py # 项目的所有配置文件
├── urls.py # 项目的 URL 声明
└── wsgi.py # 用于开发的服务器接口
运行开发服务器
python manage.py runserver
打开你的浏览器,访问 http://127.0.0.1:8000/,你应该能看到一个欢迎页面,恭喜,你的 Django 项目已经成功运行!
第三部分:创建博客应用
一个 Django 项目可以包含多个应用,我们将创建一个名为 blog 的应用来处理所有博客相关的功能。
python manage.py startapp blog
现在你的项目结构多了一个 blog 目录:
django_blog/
├── blog/ # 我们的新应用
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations/
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── myblog/
└── manage.py
步骤 1: 注册应用
为了让 Django 知道 blog 应用存在,我们需要在 myblog/settings.py 文件的 INSTALLED_APPS 列表中添加它。
# myblog/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog.apps.BlogConfig', # 添加这一行
]
我们使用 'blog.apps.BlogConfig' 是一种更规范的方式,它会自动加载 blog/apps.py 中的配置。
第四部分:定义数据模型 (Model)
我们需要在数据库中存储文章,文章有哪些属性呢?标题、内容、创建时间、作者等。
步骤 1: 编辑 blog/models.py
# blog/models.py
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):= 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="更新时间")
author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="作者")
def __str__(self):
return self.title
class Meta:
verbose_name = "文章"
verbose_name_plural = "文章"
ordering = ['-created_at']
CharField: 用于短文本,如标题。TextField: 用于长文本,如内容。DateTimeField: 用于日期和时间。auto_now_add=True表示在创建时自动设置时间戳,auto_now=True表示每次保存时都更新时间戳。ForeignKey: 建立了与User模型的多对一关系,一篇文章只对应一个作者,一个作者可以有多篇文章。on_delete=models.CASCADE表示当用户被删除时,其所有文章也会被级联删除。__str__: 定义对象的字符串表示形式,方便在后台识别。Meta: 用于定义模型的元数据,如verbose_name(后台显示的名称) 和ordering(默认排序方式)。
步骤 2: 创建并应用数据库迁移
Django 的 ORM 通过“迁移”来同步数据库模型。
# 1. 生成迁移文件 python manage.py makemigrations blog # 2. 应用迁移,在数据库中创建表 python manage.py migrate
Django 已经为你创建了 blog_post 这张数据表。
第五部分:配置 Django Admin
Django 最强大的功能之一就是自动生成的 Admin 后台,我们可以用它来管理文章。
步骤 1: 创建超级用户
python manage.py createsuperuser
按照提示输入用户名、邮箱和密码。
步骤 2: 注册模型
为了让 Post 模型在 Admin 后台显示,我们需要在 blog/admin.py 中注册它。
# blog/admin.py
from django.contrib import admin
from .models import Post
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'created_at', 'updated_at')
list_filter = ('created_at', 'author')
search_fields = ('title', 'content')
admin.site.register(Post, PostAdmin)
list_display: 定义在列表页显示哪些字段。list_filter: 添加一个侧边栏过滤器。search_fields: 添加一个搜索框。
步骤 3: 测试 Admin
重新运行开发服务器 (python manage.py runserver),然后访问 http://127.0.0.1:8000/admin/,使用你刚才创建的超级用户账号登录,你应该能看到 "Posts" 选项,点击进去就可以添加、修改和删除文章了!
第六部分:创建视图、模板和 URL
现在我们有了数据,需要让用户在网站上看到它们,这是 MVT 的核心部分。
创建视图
视图是处理请求并返回响应的函数,我们创建一个视图来展示文章列表。
# blog/views.py
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all()
context = {
'posts': posts
}
return render(request, 'blog/post_list.html', context)
Post.objects.all(): 从数据库中获取所有文章。render: 一个快捷函数,用于加载模板并返回一个包含模板渲染结果的HttpResponse对象,我们将posts变量作为context传递给模板。
创建模板
模板负责展示数据,我们需要创建一个目录结构来存放模板。
django_blog/
└── blog/
└── templates/
└── blog/
└── post_list.html # 我们的模板文件
Django 默认在应用的 templates 目录下查找模板,为了避免不同应用间的模板名冲突,我们通常会在 templates 目录下再创建一个与应用同名的子目录(blog)。
编辑 blog/templates/blog/post_list.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">我的博客</title>
<style>
body { font-family: sans-serif; margin: 40px; }
.post { border: 1px solid #ccc; padding: 10px; margin-bottom: 20px; border-radius: 5px; }
.post h2 { margin-top: 0; }
.post-meta { color: #777; font-size: 0.9em; }
</style>
</head>
<body>
<h1>我的博客</h1>
<hr>
{% for post in posts %}
<div class="post">
<h2>{{ post.title }}</h2>
<p class="post-meta">作者: {{ post.author }} | 发布于: {{ post.created_at }}</p>
<p>{{ post.content|truncatewords:30 }}</p>
</div>
{% empty %}
<p>还没有文章。</p>
{% endfor %}
</body>
</html>
{% for post in posts %}...{% endfor %}: Django 的模板for循环。{{ post.title }}: 变量替换, 用于输出变量值。|truncatewords:30: 过滤器,将文本截断为 30 个单词。
配置 URL
我们需要将 URL 路径映射到我们创建的视图。
步骤 1: 应用级 URL
在 blog 应用中创建一个 urls.py 文件。
# blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
]
path('', ...): 空路径,表示blog应用的根 URL。views.post_list: 指向blog/views.py中的post_list函数。name='post_list': 给这个 URL 起一个名字,方便在模板和代码中反向解析。
步骤 2: 项目级 URL
在 myblog/urls.py 中包含 blog 应用的 URL 配置。
# myblog/urls.py
from django.contrib import admin
from django.urls import path, include # 别忘了导入 include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')), # 添加这一行
]
path('', include('blog.urls')): 任何指向项目根路径 () 的请求,都会被传递给blog.urls来处理。
步骤 3: 访问网站
重新运行开发服务器,访问 http://127.0.0.1:8000/,现在你应该能看到你在 Admin 后台创建的文章列表了!
第七部分:总结与下一步
恭喜!你已经成功地用 Django 从零开始构建了一个功能完整的博客应用,在这个过程中,你学习了:
- 项目和应用的结构
- 定义数据模型
- 使用 Django Admin 管理数据
- 创建视图、模板和 URL 来展示数据
接下来的学习方向:
- 创建文章详情页: 为每篇文章创建一个详情页,点击标题或“阅读更多”链接可以跳转。
- 实现用户认证: 允许用户注册、登录和登出。
- 创建和编辑文章: 允许登录用户通过表单创建和编辑自己的文章。
- 美化页面: 使用 CSS 框架(如 Bootstrap 或 Tailwind CSS)来美化你的网站。
- 部署: 将你的网站部署到云服务器上,让全世界的人都能访问。
Django 的世界非常广阔,这个教程只是一个开始,继续探索,你会发现它更加强大的功能!
