![b1aa129fbea2014a0290da36807f926e.png](https://i-blog.csdnimg.cn/blog_migrate/b4258f89c141459f18e7399f2ad103d2.jpeg)
Django 是 Python 社区的两大最受欢迎的 Web 框架之一(另一个是 Flask)。凭借功能强大的脚手架和诸多开箱即用的组件,用 Django 搭建 Web 应用快速而又省力。然而,也正是因为过于强大,想要驾驭它需要花费不少的力气。本文将通过实现一个新闻发布网站带你快速熟悉 Django 框架,让你能够骑上这匹快马,在 Web 开发的战场上尽情驰骋。
起步
Django 由 Adrian Holovaty 和 Simon Willison 在 2003 年的秋天写成,并在 2005 年正式发布。他们俩当时为一个新闻报社制作网站,对快速开发有着比较高的需求,并且希望能够在开发的同时也能够让非技术人员为网站添加内容。于是这也使得 Django 具备了两项鲜明的特点:
- 高度强调可复用性和可插拔性,内置大量现成的成熟组件,开发效率极高
- 自带与数据库联动的后台管理系统,能够在开发的同时创建内容
Django 的名字取自吉他手 Django Reinhardt,发音为 JANG-goh(谐音“尖狗”),但实际上 Django 的吉祥物是一只长着翅膀的小马。
![f58586cd26bc53ef6d906ab489f30900.png](https://i-blog.csdnimg.cn/blog_migrate/48fad637f11d9bc7ed15c7ddbdfcf7b1.jpeg)
在这篇教程中,我们也将向 Django 的起源致敬——手把手带你开发一个新闻发布网站,并且可以从后台管理系统中添加新闻,展示到网站首页上。
预备知识
本教程假定你已经知道了:
- 基本的 Python 3 语言知识,包括使用 pip 安装包
- 了解 HTTP 协议基础知识,浏览器和服务器之间是如何互动的
学习目标
读完这篇教程后,你将掌握 Django MTV 框架的精髓:
- M(Model):创建数据模型,并执行数据库迁移
- T(Template):写出基本的 Django 模板,并从视图中传入数据
- V(View):在视图中访问数据库,实现业务逻辑,渲染模板,并接入路由表
虽然 Django 还有很多知识点,但是理解了 MTV,后面的知识点学习起来也就轻松多啦。
安装 Django 并启用脚手架
本文假定你已经安装好了 Python 3 和 pip,那么可以直接用 pip 安装 Django:
pip install django
直接用 pip 在全局安装 Django 的确不是一个很好的做法,用虚拟环境更符合最佳实践。为了减少初学者们的认知负担,在这里就简化了安装过程。熟悉 pipenv 等虚拟环境工具的老司机当然可以自行使用哈。
安装好 Django 后,我们用 Django 自带的脚手架工具 django-admin 创建项目:
django-admin startproject django_newscd django_news
生成的项目骨架及每个文件的作用如下所示:
django_news├── django_news // 项目全局文件目录│ ├── __init__.py│ ├── settings.py // 全局配置│ ├── urls.py // 全局路由│ └── wsgi.py // WSGI服务接口(暂时不用纠结这个是神马)└── manage.py // 项目管理脚本
我们使用 manage.py 来运行开发服务器(Development Server):
python manage.py runserver
提示
细心的你会发现出现了一行鲜红色的提示:You have 17 unapplied migration(s)...(省略 n 个字符)。不用担心,我们会在接下来的步骤中详细讲解来龙去脉。
按照提示,我们通过浏览器访问 localhost:8000,可以看到欢迎界面:
![50e5c0acb03497079499c55496c0c64c.png](https://i-blog.csdnimg.cn/blog_migrate/23902e0f9588414ff122e10a5d2d21e9.jpeg)
提示
Django 开发服务器可以保持开启,并且后面修改代码会自动重新加载,非常方便。后面运行其他命令时,再打开一个终端(命令行)即可。
一切准备就绪,缰绳已在你手中!
创建第一个自定义 Django App
在上一节中我们讲到,Django 是一个高度模块化的框架。具体而言,一个 Django 应用由多个子应用组成,我们一般称之为 App(注意不是我们常说的移动应用 APP,而是 Application 的简写),如下图所示。
![0b1c52a630536227900b44cf3167889f.png](https://i-blog.csdnimg.cn/blog_migrate/d4a678bf3288395f61b88887cf48e223.jpeg)
Django App 的类别
Django App 一般分为三大类(根据来源):