前言¶
在Web开发中,用Python快速搭建一个博客系统是很多初学者的目标。Django作为“电池内置”的Python Web框架,提供了ORM(对象关系映射)和模板引擎等核心组件,能帮我们大幅简化开发流程。本文将用最简单的步骤,带你从零开始用Django实现一个能显示文章列表的博客系统,重点理解Django的核心思想——ORM操作数据,模板渲染页面。
第一步:环境准备与项目初始化¶
要开始开发,首先需要安装Django并创建项目结构。
1. 安装Django¶
打开终端(命令提示符),运行以下命令安装最新版Django:
pip install django
验证安装是否成功:
django-admin --version # 输出版本号,如3.2.20
2. 创建Django项目和应用¶
Django项目是一个完整的Web应用容器,应用(App)是项目的功能模块。
- 创建项目:
django-admin startproject myblog # 项目名为myblog
cd myblog # 进入项目目录
- 创建应用:
python manage.py startapp blog # 创建名为blog的应用
此时项目结构如下(关键文件):
myblog/
├── myblog/ # 项目配置目录
│ ├── __init__.py
│ ├── settings.py # 项目全局设置(如数据库、应用列表)
│ ├── urls.py # 项目路由配置
│ └── wsgi.py
├── blog/ # 博客应用目录
│ ├── __init__.py
│ ├── models.py # 数据模型定义(ORM核心)
│ ├── views.py # 视图函数(处理请求)
│ └── urls.py # 应用路由配置
└── manage.py # Django命令行工具(创建迁移、启动服务等)
第二步:用ORM定义博客数据模型¶
ORM是Django的核心特性之一,它允许我们用Python类直接定义数据库表结构,无需手写SQL语句。这里我们需要为博客定义“文章”模型。
1. 定义数据模型¶
在blog/models.py中,编写一个Post类表示文章表:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200) # 文章标题(字符串,限制长度200)
content = models.TextField() # 文章内容(长文本)
pub_date = models.DateTimeField(auto_now_add=True) # 发布时间(自动添加当前时间)
def __str__(self):
return self.title # 后台显示文章标题
- 解释:
models.Model:Django模型的基类,自动关联数据库表。CharField/TextField:对应数据库的字符串/长文本字段。DateTimeField(auto_now_add=True):自动记录创建时间,无需手动设置。
2. 激活模型并创建数据库表¶
Django默认使用SQLite数据库(无需额外配置),只需将应用加入项目配置:
- 打开myblog/settings.py,在INSTALLED_APPS列表中添加'blog':
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # 添加我们的博客应用
]
- 创建数据库表(迁移数据):
python manage.py makemigrations # 生成迁移文件(将模型转为SQL)
python manage.py migrate # 执行迁移,创建表结构
此时,数据库中会生成一个blog_post表,存储文章数据。
第三步:编写视图和模板,展示博客内容¶
视图(View)处理用户请求并返回数据,模板(Template)负责将数据渲染为HTML页面。
1. 编写视图函数¶
在blog/views.py中,定义一个视图函数,从数据库中获取所有文章并传递给模板:
from django.shortcuts import render
from .models import Post # 导入刚才定义的Post模型
def index(request):
# 获取所有文章,按发布时间降序排列
posts = Post.objects.all().order_by('-pub_date')
# 渲染模板,传递posts数据
return render(request, 'blog/index.html', {'posts': posts})
2. 配置路由¶
Django通过路由(URL)将请求分发到视图。
- 先在blog/urls.py中定义应用内路由:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'), # 根路径对应index视图
]
- 再在项目路由
myblog/urls.py中包含应用路由:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')), # 根路径路由到blog应用
]
3. 创建模板文件¶
模板负责将数据渲染为HTML页面。在blog应用下创建templates/blog目录,再新建index.html:
<!DOCTYPE html>
<html>
<head>
<title>我的博客</title>
<style>
body { font-family: Arial; max-width: 800px; margin: 0 auto; padding: 20px; }
.post { border: 1px solid #ddd; padding: 10px; margin: 10px 0; border-radius: 5px; }
h2 { color: #333; }
</style>
</head>
<body>
<h1>我的第一篇博客</h1>
{% if posts %} <!-- 模板语法:判断posts是否存在 -->
{% for post in posts %} <!-- 循环渲染每篇文章 -->
<div class="post">
<h2>{{ post.title }}</h2> <!-- 显示标题 -->
<p>发布时间:{{ post.pub_date|date:"Y-m-d H:i" }}</p> <!-- 格式化日期 -->
<p>{{ post.content }}</p> <!-- 显示内容 -->
</div>
{% endfor %}
{% else %}
<p>暂无文章,快去发布第一篇吧!</p>
{% endif %}
</body>
</html>
- 模板语法:
{{ post.title }}:输出变量(文章标题)。{% for post in posts %}:循环遍历文章列表。{{ post.pub_date|date:"Y-m-d H:i" }}:用过滤器格式化日期。
运行博客系统,查看效果¶
在终端执行:
python manage.py runserver
打开浏览器访问http://127.0.0.1:8000/,就能看到你的博客页面了!如果需要添加文章,可通过Django后台管理(后续可自行探索)。
总结¶
通过这3步,我们用Django实现了一个简单的博客系统,核心理解了:
1. ORM:用Python类定义数据库表,无需写SQL。
2. 模板引擎:通过HTML+模板语法动态渲染数据。
3. MVT架构:模型(Model)存数据,视图(View)处理逻辑,模板(Template)展示页面。
接下来可以尝试扩展功能,比如添加单篇文章详情页、用户登录、评论功能等,逐步提升Django技能!