当前位置: 首页 > news >正文

Django 实战总结:手把手教你搭建个人博客

Django 是 Python 世界中最重量级的 Web 框架。它的核心哲学是 DRY (Don't Repeat Yourself),即“不要重复造轮子”。

在这篇文章中,我们将通过搭建一个个人博客系统,来总结 Django 开发中最常用的核心方法和流程。

  1. 核心架构:MTV 模式

在开始写代码前,必须理解 Django 的设计模式 MTV:

M (Model): 数据存取层。负责定义数据库结构(表、字段)。

T (Template): 表现层。负责把数据渲染成 HTML 页面给用户看。

V (View): 业务逻辑层。负责接收请求、读取数据、调用模板、返回响应。

简单来说:用户访问 -> View 接收 -> 找 Model拿数据 -> 塞进 Template -> 返回给用户。

  1. 环境搭建与项目初始化

这是 Django 开发的起手式。

常用命令

1. 安装 Django

pip install django

2. 创建新项目 (Project) - 比如叫 myblog

django-admin startproject myblog

3. 进入目录

cd myblog

4. 创建一个应用 (App) - 比如叫 blog

python manage.py startapp blog

关键点:创建 App 后,一定要去 settings.py 的 INSTALLED_APPS 列表里注册它!

myblog/settings.py

INSTALLED_APPS = [
...
'blog', # 注册我们的应用
]

  1. 第一步:定义数据 (Models)

博客最核心的数据就是“文章”。我们需要在数据库里建一张表。在 Django 中,我们只需要写一个 Python 类。

blog/models.py

from django.db import models
from django.contrib.auth.models import User # 导入内置的用户模型

class Post(models.Model):
# 标题:字符字段,最大长度200
title = models.CharField(max_length=200)

# 作者:外键关联到 User 表
author = models.ForeignKey(User, on_delete=models.CASCADE)# 正文:文本字段,不限长度
body = models.TextField()# 创建时间:自动设置为当前时间
created_at = models.DateTimeField(auto_now_add=True)def __str__(self):return self.title  # 这样在后台显示的不仅是 Object,而是文章标题

常用操作:数据库迁移
每当修改了 models.py,都必须执行以下两条命令来同步数据库:

python manage.py makemigrations # 生成迁移文件(记录你的修改)
python manage.py migrate # 执行迁移(真正修改数据库)

  1. 第二步:后台管理 (Admin)

Django 最强大的功能之一就是自带后台。我们只需要几行代码,就能拥有一个功能完备的文章管理系统。

blog/admin.py

from django.contrib import admin
from .models import Post

admin.site.register(Post)

现在,创建一个管理员账号:

python manage.py createsuperuser

运行服务 python manage.py runserver,访问 http://127.0.0.1:8000/admin,你就可以在网页上发布文章了!

  1. 第三步:处理逻辑 (Views)

我们现在需要两个页面:

首页:列出所有文章。

详情页:查看单篇文章内容。

blog/views.py

from django.shortcuts import render, get_object_or_404
from .models import Post

1. 首页视图

def post_list(request):
# ORM 查询:获取所有文章,并按时间倒序排列
posts = Post.objects.all().order_by('-created_at')
# render 方法:渲染模板,并把 context 数据传过去
return render(request, 'blog/post_list.html', {'posts': posts})

2. 详情页视图

def post_detail(request, pk):
# 获取指定 ID (pk) 的文章,如果不存在则返回 404 错误
post = get_object_or_404(Post, pk=pk)
return render(request, 'blog/post_detail.html', {'post': post})

关键方法总结:

Post.objects.all(): 获取所有数据。

Post.objects.filter(...): 筛选数据。

get_object_or_404: 安全地获取单个对象。

render: 将数据和 HTML 模板结合并返回。

  1. 第四步:配置路由 (URLs)

我们需要告诉 Django,当用户访问什么网址时,调用哪个 View。

myblog/urls.py (主路由)

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

urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')), # 将根路径转发给 blog 应用
]

blog/urls.py (App 路由 - 需新建)

from django.urls import path
from . import views

urlpatterns = [
# 首页:访问空路径 '' 时,调用 views.post_list
path('', views.post_list, name='post_list'),

# 详情页:访问 post/数字 时,调用 views.post_detail
# <int:pk> 是路径转换器,会把 URL 中的数字捕获并传给 view 函数的 pk 参数
path('post/<int:pk>/', views.post_detail, name='post_detail'),

]

  1. 第五步:编写页面 (Templates)

最后,我们需要写 HTML 来展示数据。Django 使用其特有的模板语言 (DTL)。

blog/templates/blog/post_list.html

我的博客

最新文章

<!-- 模板标签:循环遍历 posts 列表 -->
{% for post in posts %}<div><!-- URL 标签:根据 name 生成链接,不用硬编码 URL --><h2><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h2><p>作者: {{ post.author }} | 时间: {{ post.created_at }}</p><p>{{ post.body|truncatewords:30 }}</p> <!-- 过滤器:只显示前30个词 --></div><hr>
{% endfor %}

blog/templates/blog/post_detail.html

{{ post.title }}

{{ post.title }}

发布于: {{ post.created_at }}

{{ post.body|linebreaks }}

返回首页

  1. 总结:Django 开发核心流

回顾一下,当你需要开发一个新功能时,流程通常是这样的:

Models: 需要存什么新数据? -> 修改 models.py -> 迁移数据库。

URLs: 用户访问什么地址? -> 修改 urls.py。

Views: 拿到数据怎么处理? -> 修改 views.py。

Templates: 页面长什么样? -> 修改 .html 文件。

掌握了这个 MTV 闭环,你就掌握了 Django 开发的精髓。

http://www.rkmt.cn/news/87995.html

相关文章:

  • 2025年飘雪机制造商权威推荐榜单:小型飘雪机/人工飘雪机/大型飘雪源头厂家精选 - 品牌推荐官
  • 2025年12月医学教育题库评测:昭昭题库的综合表现分析 - 品牌测评鉴赏家
  • ★★★指针数组,数组指针,指针函数,函数指针,二级指针,递归函数,回调函数,函数指针数组
  • 大巴厕所厂家排名top5,热门之选! - 百誉集团
  • 2025年12月无锡宠物医院权威推荐榜:覆盖新吴区、滨湖区、惠山区、锡山区、梁溪区的专业诊疗与暖心守护之选 - 品牌企业推荐师(官方)
  • 2025年12月昭昭医考资料全面评测:靠谱性、质量与用户反馈分析 - 品牌测评鉴赏家
  • Docker网络模式深度实践:bridge到overlay全解析
  • 2025 学生党线上兼职 app 推荐:私域轻创业增收宝典 - 速递信息
  • 破解增长密码:2025国内电商数据分析平台实用选型指南 - 速递信息
  • Python进阶之路:模块、包与异常处理的实战指南
  • 提升BERT模型效率与容量的新方法:Pyramid-BERT
  • 安全审计平台:运营商数字化转型的必选项与国内优质厂商全景
  • 2025年12月昭昭医考资料深度评测:专业性与服务体验如何? - 品牌测评鉴赏家
  • VDD_EXT应用全解:原理、限制与低功耗设计优化
  • 基于MATLAB的RFID防碰撞算法仿真
  • 2025 年度 Deepseek 知识库部署服务商全景报告:专属本地化交付方案及 AI 知识库部署方案商专项解析 - 品牌2026
  • 2025年去痘印产品哪款最能打?专家实测+用户反馈给出真实答案 - 资讯焦点
  • 2025 年 12 月管道电预热工程厂家权威推荐榜:专业设备与高效施工,热力管道电预热工程一站式解决方案精选 - 品牌企业推荐师(官方)
  • 盘点2025年超纯水器/实验室超纯水器/国产超纯水器口碑好/性能好/质量好/品质好的生产企业 - 品牌推荐大师
  • 成都工程造价公司排名前五,你知道几家? - 百誉集团
  • 2025 年知识库部署服务商全攻略:AI 知识库部署方案商企业私有化部署服务通俗指南与能力测评 - 品牌2026
  • 2025 年快速卷帘门厂家最新推荐榜,聚焦企业技术实力、产品品质与高效服务能力深度剖析 - 品牌鉴赏师
  • 2025年国产均质机厂家实力排名:技术领跑品牌推荐 - 品牌推荐大师1
  • 排名前10的AI文献综述工具,选对了效率翻倍! - 百誉集团
  • 品牌在AI搜索中失声?成都奇林智媒的AI GEO解决方案,助你成为AI推荐的首选答案 - 奇林智媒GEO
  • 2025年湖南防静电地坪材料与水性环氧地坪材料公司推荐 - myqiye
  • 出海企业如何实现合规高效全球雇佣?Safeguard Global名义雇主EOR提供一站式解决方案 - 品牌2025
  • 2025年稳压器制造商权威推荐榜单:家用稳压器/电梯稳压器/机床稳压器源头厂家精选 - 品牌推荐官
  • zz llamaindex和langchain使用对比
  • 2025 年企业智能 BI 私有化部署厂商推荐 :BI 私有化方案商、本地私有化厂商如何助力企业重构数据决策体系 - 品牌2026