搭建一个合适的工作环境对于程序员的生产效率是非常重要的。虽然这可能需要花费一点时间,但这是完全值得的。

举例来说,虚拟环境可以帮助你合理的组织、管理包;好的编辑器可以方便你进行变量、包方法的跳转,实现语言高亮。

如果你还没有读过一些教程,那么请放心,这份Django教程是最新的。在我们的教程里,我们使用Django1.8和Python 3 。但这并不意味着如果你使用老版本的Django或者Python 2就不能继续这份教程,那只意味着你将需要多花点功夫来进行程序的调试,并自个儿解决些我在这儿没涉及到的问题。


搭建工作环境

学习本教程,你需要这些东西:Python3,pip3,virtualenv和virtualenvwrapper。
TaskBuster工具箱: Python3, pip3, virtualenv, virtualenvwrapper, Git以及Sublime Text

如果你使用Mac OSX,你可以查看这边文章:
Install Python 3 on Mac OS X and use virtualenv and virtualenvwrapper

当然,一个好的编辑器也是必不可少的,它可以帮助我们方便的管理所有我们创建的Django文件。我推荐使用Sublime Text,但是请随意,Vim、Emacs等其它的文本编辑器都没问题!关于Sublime Text的使用,请查看这边文章:how to install and configure Sublime Text 3 for Django

我们将在下一部分的教程讲解Git,版本控制系统。如果代码涉及到多个开发者,那么我推荐你使用如GitHub、Bitbucket等Git仓库(Bitbucket提供免费的私人仓库)。你可以查看这篇文章学习一些Git的基本使用:Git Tutorial

那好,现在就可以开始我们超酷的Django之旅啦!

安装Django1.8

首先,我们将使用Python3作为默认的Python解释器来创建一个虚拟环境。打开你的终端,输入:

1
$ which python3

来确定Python3的执行路径。我这里路径是/usr/local/bin/python3。然后,创建一个用于开发的虚拟环境,并指明Python3作为默认的Python解释器(记住,使用virtualenvwrapper时,虚拟环境是在~/.virtualenvs这个默认文件夹下,而不是你的工作目录)

1
$ mkvirtualenv --python=/usr/local/bin/python3 tb_dev

如果你的Python解释器路径跟我不一样,请更改上面的路径。当然如果你愿意,你也可以把虚拟环境的名字tb_dev改成你喜欢的。现在你可以注意到,虚拟环境已经激活–命令行将显示成这个样子:(tb_dev)[user@host]$

你可以通过下面的命令退出当前的虚拟环境:

1
$ deactivate

通过下面的命令再次激活虚拟环境:

1
$ workon tb_dev

请注意,如果你正在这个虚拟环境下工作,那么当你输入python,你将激活Python3,当你调用pip时,你实际调用的将是Python3版本的pip,即pip3。是不是觉得很帅啊?!

准备好安装最新版本的Django了吗?!在tb_dev激活的虚拟环境下,输入:

1
$ pip install Django==1.8

注意:你可以检查下是否有新版本的Django存在。

工作目录和Sublime Text

在你电脑里新建一个文件夹,起名为taskbuster_project

1
$ mkdir taskbuster_project

这个文件夹将成为你Django项目的顶层目录,它包括所有的文档,部署文件,版本控制文件,sublime项目文件,功能测试,等等。

让我们在这个文件夹下创建一个Sublime Text项目来管理这些文件(或者使用你喜欢的编辑器)。在这里,我将假设你已经使用终端激活了subl命令来打开文件:

1
$ subl taskbuster_project

这个命令将打开taskbuster_project文件夹下所有的文件。下一步,点击顶层菜单,选择项目/项目另存为,把你的项目重命名为TaskBuster.sublime-project,然后在taskbuster_project文件夹下保存文件(默认是它的顶层文件夹)。

现在,在taskbuster_project下看到两个不同的文件:TaskBuster.sublime-projectTaskBuster.sublime-workspace(注意:后者在Sublime Text里是不可见的,但在终端可见)

遵循Testing Goat

我正在读一本超棒的书,它就是由Hayyr J.W. Percival写的Test-Driven Development with Python。这本书要求你必须服从Testing Goat–这意味着你的脑海中会时不时的萦绕着“测试先行”的声音。听Testing Goat的话,测试先行,测试先行

Obey the testing Goat,Test first, test first!

那么在咱们的教程中,在创建任何的Django项目之前,我们将遵循测试先行的原则。

众所周知,当一个Django项目成功创建时,开启服务器,打开本地主页http://127.0.0.1:8000,我们总会得到一条”It worked!”的蓝色页面内容。如果我们审查这个页面,我们可以发现在head区,title标签的内容是<title>Welcome to Django</title>。我也知道,你现在看不到这个页面,因为你还没有创建任何Django项目!但你这会儿必须相信我!

Django it worked page

那现在让我们写个测试,这个测试会断定当我们打开http://127.0.0.1:8000时,我们将得到一个标题为Welcome to Django的页面。当然,这个测试将以失败告终,因为我们还没有创建任何的Djangox项目呀!但这就是我们需要遵循的原则:先创建测试,再写代码

首先,我们需要为测试创建一个新的虚拟环境,并为其安装Django 1.8:

1
2
$ mkvirtualenv --python=/usr/local/bin/python3 tb_test
$ pip install Django==1.8

第二步,为了给测试模拟一个浏览器,我们需要使用Selenium包(在安装它之前,你需要确保Firefox已经在你系统里面安装好了):

1
$ pip install --upgrade selenium

进入taskbuster_project文件夹,并为功能测试创建一个单独的文件夹。这个文件夹中将包含所有用来测试从用户的角度来考量的项目功能点。并且在这个功能测试文件夹中新建一个all_users.py的文件:

1
2
3
4
$ cd taskbuster_project
$ mkdir functional_tests
$ cd functional_tests
$ touch all_users.py

用你的编辑器打开这个文件,并写入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# -*- coding: utf-8 -*-
from selenium import webdriver
import unittest


class NewVisitorTest(unittest.TestCase):

def setUp(self):
self.browser = webdriver.Firefox()
self.browser.implicitly_wait(3)

def tearDown(self):
self.browser.quit()

def test_it_worked(self):
self.browser.get('http://localhost:8000')
self.assertIn('Welcome to Django', self.browser.title)

if __name__ == '__main__':
unittest.main(warnings='ignore')

让我们一步一步地分析上面的代码:

让我们运行下面的命令:

1
$ python all_users.py

输出结果将很明显地告诉我们测试失败。你将看到如同下面的内容:

1
FAIL: test_it_worked (__main__.NewVisitorTest)

并得到一个内容为Welcome to Django not foundAssertionError

那么就让我们开始创建一个Django项目,并让这个测试通过吧!

创建一个Django项目

进入taskbuster_project文件夹,并输入:

1
$ django-admin.py startproject taskbuster .

注意这个命令最后的句点.,它将保证创建没有任何其他额外文件夹的taskbuster项目。如此之后,你的顶层目录结构应该像这样了:
Folder structure

注意:这张图是使用tree命令输出的(如果你想使用它,你需要先把它安装好)

如同你已经看到的那样,我们已经创建了下列文件:

接下来的教程中,你会发现taskbuster文件夹将包含我们所有的appstemplatesstatic和其他与项目相关的文件

启动开发服务器

当我们完成了项目创建,我们就可以启动开发服务器了。在你的终端打开一个标签,并激活tb_dev虚拟环境,进入taskbuster_project文件夹,运行:

1
$ python manage.py runserver

也许你会遇见一个跟迁移有关的警告,但请别担心,我们将在后续的教程中处理这个问题。在输出的最后你可能会看到如同下面的内容:

1
Starting development server at http://127.0.0.1:8000/.

你可以打开你的浏览器,输入这个url来确认是否能看到It worked的消息,但我更愿意使用我们已经创建的测试 :-)

另外打开一个终端标签(使用ctrl+t或者cmd+t),并激活tb_test虚拟环境。现在,让我们运行我们的测试:

1
$ python functional_tests/all_users.py

现在你应该看到这个消息啦:

1
2
Ran 1 test in 0.05s
OK

这意味着你的测试已经通过啦!:-)

现在是时候开始创建Git仓库,并对你的代码使用版本控制。然而,在讨论那个话题之前,我们需要讨论安全这个话题。我们想把密钥(Secret Keys)隔离在版本控制系统之外,当然这是为了…保密(Secret)!

你将在下部分教程中学习这块知识,即配置文件与版本控制。

别错过哦!:-)

如果你觉得教程不错,请帮忙分享给你的朋友,也许这可以帮助到他们!:-)