⚠️ 重要声明:Python 2.7 和 Django 1.x 已经在 2025 年初停止官方支持,这意味着它们不再接收安全更新、错误修复,并且可能存在已知的漏洞,强烈建议您在学习新项目时使用 Python 3 和最新的 Django。

本教程旨在帮助您维护旧项目、理解历史代码或纯粹出于学习目的。
教程目标
我们将从头开始,创建一个简单的博客应用,包含以下功能:
- 创建一个 Django 项目。
- 创建一个名为 "blog" 的应用。
- 定义一个文章模型。
- 创建管理界面来管理文章。
- 创建视图和模板来在网站上展示文章列表和详情。
第一步:环境准备
-
安装 Python 2.7 如果您尚未安装,请从 Python 官网 下载并安装 Python 2.7.18(这是最后一个 2.7 版本),安装时请确保勾选 "Add Python to PATH" 选项。
-
安装 pip
pip是 Python 的包管理器,在较新的 Python 版本中它自带,但 2.7 可能需要单独安装,安装 Python 2.7 后,您可以在命令行中运行:
(图片来源网络,侵删)# 如果没有 pip,先下载 get-pip.py curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py python get-pip.py
-
安装 Django 我们将安装最后一个支持 Python 2.7 的稳定版本 Django 1.11。
pip install Django==1.11
第二步:创建项目和应用
-
创建项目 在您想存放项目的目录下,打开命令行,运行以下命令。
myblog是您的项目名称。django-admin.py startproject myblog
这会创建一个名为
myblog的文件夹,结构如下:myblog/ ├── manage.py └── myblog/ ├── __init__.py ├── settings.py ├── urls.py ├── wsgi.py └── migrate.py # (在旧版本中可能叫 this) -
创建应用 进入
myblog文件夹,然后创建一个名为blog的应用。cd myblog python manage.py startapp blog
现在您的项目结构变为:
myblog/ ├── manage.py ├── myblog/ # 项目配置目录 └── blog/ # 我们的应用目录 ├── __init__.py ├── admin.py ├── models.py ├── tests.py └── views.py
第三步:定义模型
模型是您数据的唯一、权威来源,它相当于数据库表的布局。
打开 blog/models.py 文件,并添加以下代码:
# blog/models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class Post(models.Model):
# 作者,外键关联到 User 模型
author = models.ForeignKey(User, on_delete=models.CASCADE)
# 文章标题,CharField 用于短字符串= models.CharField(max_length=200)
# 文章内容,TextField 用于长文本
text = models.TextField()
# 创建时间,默认为当前时间
created_date = models.DateTimeField(default=timezone.now)
# 发布时间,可以为空
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
代码解释:
from django.db import models: 导入 Django 的模型功能。class Post(models.Model):: 定义一个Post模型,它继承自models.Model。author,title,text,created_date,published_date: 都是模型的字段,定义了数据类型和约束。__str__(self): 这是一个 Python 的“魔术方法”,定义了当对象被转换为字符串时应该返回什么,这在 Django 的管理后台非常有用。
第四步:激活应用并创建数据库
-
激活应用 Django 需要知道您的新应用,打开
myblog/myblog/settings.py文件,找到INSTALLED_APPS列表,并将'blog'添加进去。# myblog/myblog/settings.py INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', # 添加我们的 blog 应用 ) -
创建数据库迁移文件 迁移文件是 Django 对模型变更的记录,运行以下命令来生成迁移文件:
python manage.py makemigrations blog
您会看到类似
Migrations for 'blog'的输出,这表示 Django 已经根据models.py创建了新的迁移文件。 -
应用迁移 将迁移应用到数据库,创建实际的表结构。
python manage.py migrate
这一步会执行所有未应用的迁移,为您的
Post模型在数据库中创建一个blog_post表。
第五步:配置管理后台
Django 自带一个强大的管理后台,让我们可以轻松管理网站内容。
-
创建超级用户 为了登录管理后台,我们需要一个超级用户账户。
python manage.py createsuperuser
按照提示输入用户名、邮箱和密码。
-
注册模型 打开
blog/admin.py文件,并注册Post模型,使其在管理后台可见。# blog/admin.py from django.contrib import admin from .models import Post admin.site.register(Post)
-
启动开发服务器 运行开发服务器来查看我们的网站。
python manage.py runserver
-
测试管理后台 在浏览器中访问 http://127.0.0.1:8000/admin/。 使用您刚刚创建的超级用户名和密码登录。 您应该能看到 "Posts" 在 "Blog" 应用下,点击 "Add" 来添加您的第一篇文章,然后保存。
第六步:创建视图和模板
视图是处理业务逻辑并返回响应的函数,模板是用于渲染 HTML 的文件。
-
配置 URL 我们需要一个入口点,打开
myblog/myblog/urls.py,添加blog应用的 URL。# myblog/myblog/urls.py from django.conf.urls import include, url # 注意:Python 2.7 中是 conf.urls from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'', include('blog.urls')), # 将所有非 admin 的请求都交给 blog.urls 处理 ] -
创建应用的 URL 配置 在
blog应用目录下创建一个名为urls.py的新文件。# blog/urls.py from django.conf.urls import url from . import views urlpatterns = [ # 当访问根路径 / 时,调用 views.post_list 函数 url(r'^$', views.post_list, name='post_list'), ] -
创建视图 打开
blog/views.py,添加post_list视图。# blog/views.py from django.shortcuts import render from django.utils import timezone from .models import Post def post_list(request): # 获取所有已发布的文章,按发布日期降序排列 posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('-published_date') # 将 posts 对象传递给模板 return render(request, 'blog/post_list.html', {'posts': posts})代码解释:
Post.objects.filter(...): 从数据库中查询Post对象。published_date__lte=timezone.now(): 筛选出published_date小于或等于当前时间的文章(即已发布的文章)。order_by('-published_date'): 按published_date降序排列,最新的文章在最前面。render(): 渲染一个模板并返回一个 HttpResponse 对象,我们传递了posts查询结果。
-
创建模板 Django 需要知道去哪里找模板,在
blog应用目录下创建一个templates/blog/的文件夹结构。blog/ └── templates/ └── blog/ └── post_list.html # 创建这个文件在
post_list.html中写入以下 HTML 代码:<!-- blog/templates/blog/post_list.html --> <html> <head> <title>My Blog</title> </head> <body> <h1>My Blog</h1> {% for post in posts %} <div> <p>Published: {{ post.published_date }}</p> <h2><a href="#">{{ post.title }}</a></h2> <p>{{ post.text|linebreaks }}</p> </div> {% empty %} <p>No posts are available yet.</p> {% endfor %} </body> </html>代码解释:
{% for post in posts %}: 这是一个 Django 模板语言(Django Template Language, DTL)的循环,遍历posts变量。{{ post.published_date }}: 用于输出变量的值。|linebreaks: 这是一个过滤器,将文本中的换行符 (\n) 转换成 HTML 的<p>
第七步:运行并查看结果
确保您的开发服务器正在运行 (python manage.py runserver),然后在浏览器中访问 http://127.0.0.1:8000/。
您应该能看到您在管理后台创建的文章列表了!
后续步骤
恭喜!您已经成功创建了一个基础的 Django 博客,接下来您可以尝试:
- 创建文章详情页(点击标题跳转到详情)。
- 创建表单来发布新文章。
- 添加样式(CSS)来美化您的网站。
- 学习 Django 的表单、类视图、静态文件处理等更高级的主题。
希望这份教程对您有帮助!
