BLOG
Enjoy when you can, and endure when you must.
APR 03, 2016/Django
用 Django 构建简易博客(一):开始前的准备工作

在我建立这个网站之初,我就发了一个系列的博客《Django 博客系统开发》,当时的想法是将自己所学和所实践的一些东西整理一下、记录下来。时至今日,三年的时光已在眨眼间过去,我发现这几篇文章在我网站的访问量排行中依然居高不下。说明这几年大家对 Python 和 Django 的关注度确实比较高并且有很多新的开发者加入其中,这当然要数是一个非常好的趋势。但技术是不断发展的,特别 Python 和 Django 都一直处于快速发展期,当年的文章中提到的方法很多已不再适用。因此萌发了做一个更新的想法,让更多的朋友关注最新的技术,而不是面对一个旧版冥思苦想。

用 Django 来快速搭建一个简易的博客,我一直认为是一个自我实践的好方法。就像我自己的网站一样,我在多个版本迭代中出现了一个从简到繁、又从繁到简的过程,这是我不断的在尝试和优化。只要愿意关注细节、乐意去思考,即使是一个很小的东西,也能从中收获不少。

当然,这里我用到了一个名词:实践。是的,要想做出一样东西,即使再简单,也需要基础来支撑。因此在开始实践前,务必要首先学习 Python 语言本身并对 Django 开发框架有一定的了解。
这也明确了本文所面向的读者:具备 Python 基础,对 Django 开发框架有一定了解,想要利用他来做一些基础实践的开发者。如果你还处于零基础阶段,建议阅读一下 Mark Lutz 的《Learning Python》以及 《The Django Book》两本书籍,他们能够引领你进入这个奇妙的世界。

另外,文章中会包含一些我个人的编码风格、见解与主张。因此并不一定要遵循。如果对其有一些独到的看法和改进意见,我们都可以随时沟通、共同改进。

 

第一篇:准备工作

 

基础环境

本文基于 Python3.5 及 Django 1.9 版本编写,这是到 2016 年 4 月初为止的最新版本。因此请确保系统中安装了对应版本的 Python 和 Django。至于如何安装,本文不再饶恕,可以参考相应的官方文档。

 

关于 Django 的 MVC 层

Django 紧紧地遵循 MVC 模式,可以称得上是一种 MVC 框架。 以下是 Django 中 M、V 和 C 各自的含义:

  • M:数据存取部分,由 django 数据库层处理;
  • V:选择显示哪些数据要显示以及怎样显示的部分,由视图和模板处理;
  • C:根据用户输入委派视图的部分,由 Django 框架根据 URLconf 设置,对给定 URL 调用适当的 Python 函数。

由于 C 由框架自行处理,而 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),因此 Django 也被称为 MTV 框架。在 MTV 开发模式中:

  • M 代表模型(Model):即数据存取层。该层处理与数据相关的所有事务:如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等;
  • T 代表模板(Template):即表现层。该层处理与表现相关的决定:如何在页面或其他类型文档中进行显示;
  • V 代表视图(View):即业务逻辑层。该层包含存取模型及调取恰当模板的相关逻辑。你可以把它看作模型与模板之间的桥梁。

这个模式在开发中至关重要,因此必须牢记在心并运用到实际开发过程中。

 

开始新的项目

要从何开始?这对于新手来说感觉是个世界大难题。不过因为我们是基于一个框架来开发的,因此其势必会帮助我们解决“如何开始”这个问题。在安装了 Django 之后,能够获得一个命令行工具 django-admin.py,其包含一个 startproject 能帮助我们快速创建一个全新的项目并做好最基本的配置。现在就来创建一个名叫 myblog 的项目:

django-admin.py startproject myblog

命令完成之后就会在当前目录下生成一个新的 myblog 目录,且包含如下文件:

正如之前所说的,Django 已为你做好了基本的配置,因此这个项目已是可运行的,接下来的工作就要交给上图中的 manage.py 来处理。进入 myblog 目录并执行:

python manage.py runserver

你会看到如下内容:

$ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
March 28, 2016 - 23:39:18
Django version 1.9.4, using settings 'myblog.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

由此可以看出当前服务会运行在 127.0.0.1 的 8000 端口上,这是 Django 开发服务器的默认行为。让我们打开浏览器看看目前为止的成效吧!

恭喜你!你的第一步已经做到了!这是 Django 的欢迎页面,表示一个全新的工程已经运行了起来。

 

连接数据库

接下来要解决的是准备工作的最后一项:连接数据库。我们要构建的是一个博客系统,显然其内容是动态的,因此必须连接到一个数据库来动态存取博客等数据。Django 原生支持多种数据库的连接,包括 SQLite、MySQL、PostgreSQL 等,最简单的要数 SQLite,这是一个基于本地文件的数据库,本文也以此为例。数据库的配置在 Django 全局的配置文件中:myblog/settings.py。其中可以发现以下配置段:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR,'db.sqlite3'),
    }
}

DATABASES 配置是一个字典项,也就意味着可以配置多数据库。当然这里仅仅包含一个并放在“default”中,标明为默认数据库配置。这里的 ENGINE 指定的是使用 SQLite 作为 backend: django.db.backends.sqlite3;而 NAME 则指明数据库文件的位置,即当前运行目录下的 db.sqlite3。如果仔细观察的话,刚才在执行 runserver 命令的时候,Django 已经自动生成了该文件。不过即便如此,其中还可以算是未包含任何表数据。Django 自身会有一些依赖的数据表,因此有必要在这里将这些基础表创建出来,现在我们要依靠 manage.py 的 migrate 来做到这一点:

$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, sessions, contenttypes
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying sessions.0001_initial... OK

到这里为止,一些最基础的工作就算完成了,接下来可以开始我们的简易博客系统之旅。

 

发现更多

 

探寻 django-admin.py 和 manage.py 的奥秘

之前,我们分别利用了 django-admin.py 和 manage.py 来创新新的项目以及运行开发服务器。这一切都是如此的简单,不过我们可不能就此停止。他们其中还隐藏着大量有用的东西值得去探索,而在接下来的文章中我们也会多次运用到 manage.py 来帮助我们完成一些所需的工作。因此建议大家可以通过阅读官方文档等方式来了解更多有关 django-admin.py 和 manage.py 的故事。

 

一个意想不到的站点管理

Django 非常人性化的一点就是内置了一个站点管理工具。并且在最新的 Django 中,这个站点管理工具是默认开启的。你可以尝试通过 /admin/ 路径来访问他(如果没有对数据库做初始化同步,访问这个页面会报错)。如果可能,尝试通过官方文档等途径提前了解一下他,并尝试执行创建超级管理员账户及利用该账户登录到后台等操作来进行一次初步的体验。这在之后会使用到。

 

用 IDE 工具帮助提高开发效率

当进入到真正的实践环节或者开发工作中的时候,一个工程会包含众多的文件和目录层次,并且各文件之间或多或少会有依赖性存在。因此在这种时候,找寻一个合适的 IDE 工具会帮助我们大大提高工作效率,并对整个工程有一个更好的全局把控。PyCharm 也许是个不错的选择,没有接触过的朋友可以去尝试一下。

 

继续阅读下一篇《用 Django 构建简易博客(二):开启博客系统之旅

COMMENTS
04/07From 苏Eagle

学习下,写得挺细致的。

19/01From crazysnow

manage.py is not a file ,is an order newly added when you create a new project

21/11From kevinlee

很不错的教程,最近在学习Django这个框架,参考下你的心得

23/10From INSPIRE

谢谢!写的很棒!

29/09From abc111

挺不错的,跟着学。

LEAVE COMMNT