{"id":15033852,"url":"https://github.com/stacklens/django_blog_tutorial","last_synced_at":"2025-10-25T20:06:44.062Z","repository":{"id":37686723,"uuid":"146152946","full_name":"stacklens/django_blog_tutorial","owner":"stacklens","description":"Django搭建博客教程","archived":false,"fork":false,"pushed_at":"2024-04-17T13:28:42.000Z","size":2137,"stargazers_count":1379,"open_issues_count":14,"forks_count":421,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-04-08T01:38:48.103Z","etag":null,"topics":["django","python"],"latest_commit_sha":null,"homepage":"https://www.dusaiphoto.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stacklens.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-08-26T05:05:55.000Z","updated_at":"2025-04-04T15:34:02.000Z","dependencies_parsed_at":"2024-04-17T14:42:04.438Z","dependency_job_id":null,"html_url":"https://github.com/stacklens/django_blog_tutorial","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacklens%2Fdjango_blog_tutorial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacklens%2Fdjango_blog_tutorial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacklens%2Fdjango_blog_tutorial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacklens%2Fdjango_blog_tutorial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stacklens","download_url":"https://codeload.github.com/stacklens/django_blog_tutorial/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254414497,"owners_count":22067272,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","python"],"created_at":"2024-09-24T20:22:59.352Z","updated_at":"2025-10-25T20:06:43.995Z","avatar_url":"https://github.com/stacklens.png","language":"Python","readme":"[![](https://img.shields.io/badge/python-3.7.0-orange.svg)](https://www.python.org/downloads/release/python-370/)\n[![](https://img.shields.io/badge/django-2.2-green.svg)](https://docs.djangoproject.com/en/2.1/releases/2.1/)\n[![](https://img.shields.io/badge/bootstrap-4.1.3-blue.svg)](https://getbootstrap.com/docs/4.1/getting-started/introduction/)\n[![](https://img.shields.io/badge/license-CC_BY_NC_4.0-000000.svg)](https://creativecommons.org/licenses/by-nc/4.0/)\n\n# Django搭建个人博客教程\n\n这是面向新人的**Django搭建个人博客教程**的项目代码。\n\n**教程为零基础的小白准备，目的是快速搭建一个博客网站。**\n\n## 教程特点\n- 零基础、免费、中文\n- 基于最新的 Python 3.7、Django 2.2 和 Bootstrap 4 版本\n- 完整项目代码，以及详细的注释\n\n## 适合人群\n- 拥有一台能开机的电脑\n- 有一点点最基础的python编程知识\n- 每天能抽出一个小时学习\n\n不要犹豫，现在立刻开始Django的学习吧！\n\n## 社群\n\n欢迎来到 Django 学习者群：\n\n![](https://blog.dusaiphoto.com/dusainet-7000K/chameleonQR-0608.jpg)\n\n## 教程导航\n**章节编号与GitHub仓库分支（Branch）编号是对应的。**\n\n**01** - [前言](https://github.com/stacklens/django_blog_tutorial/blob/master/md/01.前言.md)\n\n- Django 简介 / 资源列表 / 提问须知\n\n**02** - [教程的开发环境](https://github.com/stacklens/django_blog_tutorial/blob/master/md/02.教程的开发环境.md)\n\n- 环境简介 / 安装 Python / 配置虚拟环境\n- 安装 Django / 创建 Django 项目 / 运行 Django 服务器\n- 代码编辑器 / 浏览器选择\n\n**03** - [创建 APP](https://github.com/stacklens/django_blog_tutorial/blob/master/md/03.创建app.md)\n\n- 认识项目结构 / 注册 APP / 配置访问路径\n\n**04** - [编写 Model](https://github.com/stacklens/django_blog_tutorial/blob/master/md/04.编写Model.md)\n\n- Django 模式简介 / 模型简介\n- 编写 Model / Model 字段分解\n- 数据迁移\n\n**05** - [View 视图初探](https://github.com/stacklens/django_blog_tutorial/blob/master/md/05.View视图初探.md)\n\n- 第一个视图\n- 网站后台概念 / 创建管理员 / 注册 app\n- 检视数据库\n\n**06** - [View 及 Template](https://github.com/stacklens/django_blog_tutorial/blob/master/md/06.View及Template.md)\n\n- 改写视图函数\n- 编写模板 / 错误分析\n- Debug 工具\n\n**07** - [使用Bootstrap改写模板](https://github.com/stacklens/django_blog_tutorial/blob/master/md/07.使用Bootstrap改写模板.md)\n\n- 配置 Bootstrap 4\n- 编写模板 / 模板继承\n\n**08** - [编写文章详情页面](https://github.com/stacklens/django_blog_tutorial/blob/master/md/08.编写文章详情页面.md)\n\n- 详情页面视图 / 详情页面模板\n- 优化网页入口 / 参数传递\n\n**09** - [使用Markdown书写文章](https://github.com/stacklens/django_blog_tutorial/blob/master/md/09.使用Markdown书写文章.md)\n\n- 安装 Markdown\n- 在视图中使用 Markdown / 模板渲染\n- 代码高亮 / 故障排查 / 自定义样式\n\n**10** - [发布新文章](https://github.com/stacklens/django_blog_tutorial/blob/master/md/10.发布新的文章.md)\n\n- 表单类 / 处理创建请求 / 获取数据\n- csrf_token / 模板中的表单 / 优化写文章入口\n\n**11** - [删除文章](https://github.com/stacklens/django_blog_tutorial/blob/master/md/11.删除文章.md)\n\n- get 方式删除文章 / post 方式删除文章\n- 弹窗功能 / 再谈 CSRF\n\n**12** - [更新文章](https://github.com/stacklens/django_blog_tutorial/blob/master/md/12.更新文章.md)\n\n- 更新文章视图 / 编写模板 / url 和入口\n\n**13** - [用户的登录和登出](https://github.com/stacklens/django_blog_tutorial/blob/master/md/13.用户的登录和退出.md)\n\n- 用户管理简介 / 再谈表单类\n- 登录视图 / Session 介绍 / 登录模板 / url 及其他设置\n- 用户的登出\n\n**14** - [用户的注册](https://github.com/stacklens/django_blog_tutorial/blob/master/md/14.用户的注册.md)\n\n- 注册表单 /  注册视图 / 模板和 url\n\n**15** - [用户的删除](https://github.com/stacklens/django_blog_tutorial/blob/master/md/15.用户的删除.md)\n\n- 权限与视图 / 检查数据库\n\n**16** - [重置用户密码](https://github.com/stacklens/django_blog_tutorial/blob/master/md/16.重置用户密码.md)\n\n- 安装三方库 / 使用库\n- 配置邮箱 / 常见错误\n\n**17** - [拓展用户信息](https://github.com/stacklens/django_blog_tutorial/blob/master/md/17.拓展用户信息.md)\n\n- 拓展 User / 重建数据库\n- 表单、视图和模板 / 修改 article 视图 / 配置后台\n\n**18** - [上传头像](https://github.com/stacklens/django_blog_tutorial/blob/master/md/18.上传头像.md)\n\n- 必要配置 / 编写 MTV\n\n**19** - [文章分页](https://github.com/stacklens/django_blog_tutorial/blob/master/md/19.文章分页.md)\n\n- Paginator 类 / 分页视图 / 模板编写\n\n**20** - [浏览量](https://github.com/stacklens/django_blog_tutorial/blob/master/md/20.浏览量.md)\n\n- 修改模型 / 列表模板 / 详情模板 / 修改视图\n- 鉴权\n\n**21** - [最热文章](https://github.com/stacklens/django_blog_tutorial/blob/master/md/21.最热文章.md)\n\n- 重构视图 / 修改模板及测试\n\n**22** - [搜索文章](https://github.com/stacklens/django_blog_tutorial/blob/master/md/22.搜索文章.md)\n\n- 搜索逻辑 / get 和 post 的区别 / Q对象\n- 面包屑组件 / 搜索框\n\n**23** - [文章目录](https://github.com/stacklens/django_blog_tutorial/blob/master/md/23.文章目录.md)\n\n- 文章中的目录\n- 任意位置的目录\n\n**24** - [评论](https://github.com/stacklens/django_blog_tutorial/blob/master/md/24.评论.md)\n\n- 创建评论 app / 编写评论模型\n- get_object_or_404() / 日期显示及管道符\n\n**25** - [课间休息](https://github.com/stacklens/django_blog_tutorial/blob/master/md/25.课间休息.md)\n\n- 进阶内容介绍\n\n**26** - [基于类的视图](https://github.com/stacklens/django_blog_tutorial/blob/master/md/26.基于类的视图.md)\n\n- 类视图简介 / 类视图与函数视图\n- 通用视图 / 动态过滤 / 在类视图中添加上下文\n- 混入类 / 详情页、编辑页视图\n\n**27** - [文章栏目](https://github.com/stacklens/django_blog_tutorial/blob/master/md/27.文章栏目.md)\n\n- 编写栏目模型 / 在列表中显示栏目\n- 添加测试数据 / 重写文章列表 / 更新MTV\n\n**28** - [文章标签](https://github.com/stacklens/django_blog_tutorial/blob/master/md/28.文章标签.md)\n\n- 安装 Django-taggit\n- 修改模型 / 修改发表视图\n- 标签过滤\n\n**29** - [文章标题图](https://github.com/stacklens/django_blog_tutorial/blob/master/md/29.文章标题图.md)\n\n- 用 Pillow 处理图片 / 模板与测试\n\n**30** - [富文本编辑器](https://github.com/stacklens/django_blog_tutorial/blob/master/md/30.富文本编辑器.md)\n\n- 安装 Django-ckeditor\n- 在后台使用 ckeditor / 代码高亮\n- 在前台使用 ckeditor / 宽度自适应\n\n**31** - [四个小功能](https://github.com/stacklens/django_blog_tutorial/blob/master/md/31.四个重要的小功能.md)\n\n- 回到顶部浮动按钮 / 矢量图标 / 页脚沉底 / 粘性侧边栏\n\n**32** - [多级评论](https://github.com/stacklens/django_blog_tutorial/blob/master/md/32.多级评论.md)\n\n- 安装 Django-mptt\n- 理解树形结构 / 前端渲染 / 遍历树 / 加载 Modal\n- Ajax 提交表单\n\n**33** - [消息通知](https://github.com/stacklens/django_blog_tutorial/blob/master/md/33.消息通知.md)\n\n- 安装 django-notifications\n- 消息通知用法简介\n- UI 表现 / 理解已读与未读\n\n**34** - [锚点定位](https://github.com/stacklens/django_blog_tutorial/blob/master/md/34.锚点定位.md)\n\n- 理解锚点\n- html 拼接 / 视图拼接 / 流动的数据 / 三元运算符\n\n**35** - [第三方登录](https://github.com/stacklens/django_blog_tutorial/blob/master/md/35.第三方登录.md)\n\n- 本地登录 / 美化模板\n- GitHub 登录 / allauth 配置项\n\n**36** - [自动化测试](https://github.com/stacklens/django_blog_tutorial/blob/master/md/36.自动化测试.md)\n\n- 第一个测试 / 暴露 bug 的方法 / 运行单元测试 / 修复 bug\n- 对视图的测试 / Selenium\n\n**37** - [日志记录](https://github.com/stacklens/django_blog_tutorial/blob/master/md/37.日志记录.md)\n\n- 日志的组成\n- 日志配置示例 / 复杂示例\n- 日志分割 / 自定义日志\n\n**38** - [模板过滤器和标签](https://github.com/stacklens/django_blog_tutorial/blob/master/md/38.模板过滤器和标签.md)\n\n- 注册过滤器和标签\n- 更人性化的时间 / 简单标签 / 包含标签\n\n**39** - [点赞功能](https://github.com/stacklens/django_blog_tutorial/blob/master/md/39.点赞功能.md)\n\n- 实现逻辑的探讨 / LocalStorage 介绍\n- JS 与 Ajax / 利用调试接口\n\n**40** - [将项目部署到云服务器](https://github.com/stacklens/django_blog_tutorial/blob/master/md/40.将项目部署到云服务器.md)\n\n- 配置服务器\n- 远程连接 / 代码部署 / Nginx 配置 / Gunicorn 配置\n- 解决遗留问题 / 后期运维 / 域名及优化\n\n**41** - [期末总结](https://github.com/stacklens/django_blog_tutorial/blob/master/md/41.期末总结.md)\n\n- 接下来学什么 / 写在最后\n\n**42** - [小功能集合贴](https://github.com/stacklens/django_blog_tutorial/blob/master/md/42.小功能集合贴.md)\n\n- 快捷导航 / 页面定位\n\n**43** - [读者常见问题](https://github.com/stacklens/django_blog_tutorial/blob/master/md/43.读者常见问题.md)\n\n## 教程快照\n**代码片段：**\n![](http://blog.dusaiphoto.com/github-quickview-3.jpg)\n\n---\n\n**博客首页片段：**\n![](http://blog.dusaiphoto.com/github-quickview-2.png)\n\n---\n\n**博客详情页片段：**\n![](http://blog.dusaiphoto.com/github-quickview-1.jpg)\n\n## 代码使用说明\n确认你的电脑已经正确安装 Python 3.4 以上的版本。\n\n下载项目后，在命令行中进入项目目录，并创建**虚拟环境**：\n\n```bash\npython -m venv env\n```\n\n运行**虚拟环境**（Windows环境）:\n\n```bash\nenv\\Scripts\\activate.bat\n```\n\n或（Linux环境）：\n\n```bash\nsource env/bin/activate\n```\n\n自动安装所有依赖项：\n\n```bash\npip install -r requirements.txt\n```\n\n然后进行数据迁移：\n```bash\npython manage.py migrate\n```\n\n最后运行测试服务器：\n```bash\npython manage.py runserver\n```\n\n项目就运行起来了。\n\n数据库文件`db.sqlite3`以及媒体文件夹`media`中的内容是方便读者查看示例效果而存在的。\n\nmaster版本管理员账号：dusai  密码：adminpassword\n\n如果你想清除所有数据及媒体文件，将它们直接删除，并运行：\n\n```bash\npython manage.py createsuperuser\n```\n\n即可重新创建管理员账号。\n\n## 许可协议\n\n《Django 搭建个人博客教程》（包括且不限于文章、代码、图片等内容）遵守 **署名-非商业性使用 4.0 国际 (CC BY-NC 4.0) 协议**。协议内容如下。\n\n**您可以自由地：**\n\n- **共享** — 在任何媒介以任何形式复制、发行本作品。\n- **演绎** — 修改、转换或以本作品为基础进行创作。\n\n只要你遵守许可协议条款，许可人就无法收回你的这些权利。\n\n**惟须遵守下列条件：**\n\n- **署名** — 您必须给出**适当的署名**，提供指向本许可协议的链接，同时标明是否（对原始作品）作了修改。您可以用任何合理的方式来署名，但是不得以任何方式暗示许可人为您或您的使用背书。\n- **非商业性使用** — 您不得将本作品用于**商业目的**。\n\n- **没有附加限制** — 您不得适用法律术语或者技术措施从而限制其他人做许可协议允许的事情。\n\n\u003e 适当的署名：您必须提供创作者和署名者的姓名或名称、版权标识、许可协议标识、免责标识和作品链接。\n\u003e\n\u003e 商业目的：主要目的为获得商业优势或金钱回报。","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstacklens%2Fdjango_blog_tutorial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstacklens%2Fdjango_blog_tutorial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstacklens%2Fdjango_blog_tutorial/lists"}