18.1 建立项目
建立项目时,首先需要以规范的方式对项目进行描述,再建立虚拟环境,以便在其中创建项目。
18.1.1 制定规范
完整的规范详细说明了项目的目标,阐述了项目的功能,并讨论了项目的外观和用户界面。与任何良好的项目规划和商业计划书一样,规范应突出重点,帮助避免项目偏离轨道。这里不会制定完整的项目规划,只列出一些明确的目标,以突出开发的重点。我们制定的规范如下:
我们要编写一个名为“学习笔记”的Web应用程序,让用户能够记录感兴趣的主题,并在学习每个主题的过程中添加日志条目。“学习笔记”的主页对这个网站进行描述,并邀请用户注册或登录。用户登录后,可以创建新主题、添加新条目以及阅读既有的条目。
学习新的主题时,记录学到的知识可帮助跟踪和复习这些知识。优秀的应用程序让这个记录过程简单易行。
18.1.2 建立虚拟环境
要使用Django,首先需要建立一个虚拟工作环境。虚拟环境 是系统的一个位置,可在其中安装包,并将之与其他Python包隔离。将项目的库与其他项目分离是有益的,并且为了在第20章将“学习笔记”部署到服务器,这也是必需的。
为项目新建一个目录,将其命名为learning_log,再在终端中切换到这个目录,并执行如下命令创建一个虚拟环境:
learning_log$ python -m venv ll_env
learning_log$
这里运行了模块venv ,并使用它创建了一个名为ll_env的虚拟环境。(请注意,ll_env的开头是两个小写字母l,而不是数字1。)如果你运行程序或安装包时使用的是命令 python3 ,这里也务必使用同样的命令。
18.1.3 激活虚拟环境
现在需要使用下面的命令激活虚拟环境:
learning_log$ source ll_env/bin/activate
❶ (ll_env)learning_log$
这个命令运行ll_env/bin中的脚本activate。环境处于活动状态时,环境名将包含在圆括号内,如❶处所示。在这种情况下,你可以在环境中安装包,并使用已安装的包。在ll_env中安装的包仅在该环境处于活动状态时才可用。
注意 如果你使用的是Windows系统,请使用命令ll_env\Scripts\activate (不包含source )来激活这个虚拟环境。如果你使用的是PowerShell,可能需要将Activate 的首字母大写。
要停止使用虚拟环境,可执行命令 deactivate :
(ll_env)learning_log$ deactivate
learning_log$
如果关闭运行虚拟环境的终端,虚拟环境也将不再处于活动状态。
18.1.4 安装Django
激活虚拟环境后,执行如下命令安装Django:
(ll_env)learning_log$ pip install django
Collecting django
—snip—
Installing collected packages: pytz, django
Successfully installed django-2.2.0 pytz-2018.9 sqlparse-0.2.4
(ll_env)learning_log$
由于是在虚拟环境(独立的环境)中工作,在各种系统中安装Django的命令都相同:不需要指定标志—user ,也不需要使用像python -m pip install package_name 这样较长的命令。
别忘了,Django仅在虚拟环境ll_env处于活动状态时才可用。
注意 每隔大约8个月,Django新版本就会发布,因此在你安装Django时,看到的可能是更新的版本。即便你使用的是更新的Django版本,这个项目也可行。如果要使用这里所示的Django版本,请使用命令pip install django==2.2.* 安装Django 2.2的最新版本。如果你在使用更新的版本时遇到麻烦,请参阅本书的在线配套资源。
18.1.5 在Django中创建项目
在虚拟环境依然处于活动状态的情况下(ll_env包含在圆括号内),执行如下命令新建一个项目:
❶ (llenv)learninglog$ django-admin startproject learning_log .
❷ (ll_env)learning_log$ ls
learning_log ll_env manage.py
❸ (ll_env)learning_log$ ls learning_log
__init.py settings.py urls.py wsgi.py
❶处的命令让Django新建一个名为learning_log的项目。这个命令末尾的句点让新项目使用合适的目录结构,这样开发完成后可轻松地将应用程序部署到服务器。
注意 千万别忘了这个句点,否则部署应用程序时将遭遇一些配置问题。如果忘记了这个句点,要删除已创建的文件和文件夹(ll_env除外),再重新运行这个命令。
在❷处,运行命令ls (在Windows系统上为dir ),结果表明Django新建了一个名为learning_log的目录,还创建了文件manage.py。后者是一个简单的程序,接受命令并将其交给Django的相关部分运行。我们将使用这些命令来管理使用数据库和运行服务器等任务。
目录learning_log包含4个文件(见❸),最重要的是settings.py、urls.py和wsgi.py。文件settings.py指定Django如何与系统交互以及如何管理项目。在开发项目的过程中,我们将修改其中一些设置,并添加一些设置。文件urls.py告诉Django,应创建哪些页面来响应浏览器请求。文件wsgi.py帮助Django提供它创建的文件,这个文件名是Web服务器网关接口 (Web server gateway interface)的首字母缩写。
18.1.6 创建数据库
Django将大部分与项目相关的信息存储在数据库中,因此需要创建一个供Django使用的数据库。为给项目“学习笔记”创建数据库,请在虚拟环境处于活动状态的情况下执行下面的命令:
(ll_env)learning_log$ python manage.py migrate
❶ Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
—snip—
Applying sessions.0001_initial… OK
❷ (ll_env)learning_log$ ls
db.sqlite3 learning_log ll_env manage.py
我们将修改数据库称为迁移 (migrate)数据库。首次执行命令migrate 时,将让Django确保数据库与项目的当前状态匹配。在使用SQLite(后面将详细介绍)的新项目中首次执行这个命令时,Django将新建一个数据库。在❶处,Django指出它将准备好数据库,用于存储执行管理和身份验证任务所需的信息。
在❷处运行命令ls ,其输出表明Django又创建了一个文件db.sqlite3。SQLite是一种使用单个文件的数据库,是编写简单应用程序的理想选择,因为它让你不用太关注数据库管理的问题。
注意 在虚拟环境中运行manage.py时,务必使用命令python ,即便你在运行其他程序时使用的是另外的命令,如python3 。在虚拟环境中,命令python 指的是在虚拟环境中安装的Python版本。
18.1.7 查看项目
下面来核实Django正确地创建了项目。为此,可使用命令runserver 查看项目的状态,如下所示:
(ll_env)learning_log$ python manage.py runserver
Watchman unavailable: pywatchman not installed.
Watching for file changes with StatReloader
Performing system checks…
❶ System check identified no issues (0 silenced).
February 18, 2019 - 16:26:07
❷ Django version 2.2.0, using settings 'learning_log.settings'
❸ Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Django启动了一个名为development server的服务器,让你能够查看系统中的项目,了解其工作情况。如果你在浏览器中输入URL以请求页面,该Django服务器将进行响应:生成合适的页面,并将其发送给浏览器。
Django在❶处通过检查确认正确地创建了项目,在❷处指出使用的Django版本以及当前使用的设置文件的名称,并在❸处指出项目的URL。URL http://127.0.0.1:8000/表明项目将在你的计算机(即localhost)的端口8000上侦听请求。localhost指的是只处理当前系统发出的请求,而不允许其他任何人查看你正在开发的页面的服务器。
现在打开一款Web浏览器,并输入URL http://localhost:8000/(如果这不管用,请输入http://127.0.0.1:8000/)。你将看到类似于图18-1所示的页面。这个页面是Django创建的,让你知道到目前为止一切正常。现在暂时不要关闭这个服务器,等你要关闭这个服务器时,可切换到执行命令runserver 时所在的终端窗口,再按Ctrl + C。
图18-1 到目前为止一切正常
注意 如果出现错误消息That port is already in use(指定端口被占用),请执行命令python manage.py runserver 8001 ,让Diango使用另一个端口。如果这个端口也不可用,请不断执行上述命令,并逐渐增大其中的端口号,直到找到可用的端口。
动手试一试
练习18-1:新项目 为深入了解Django都做了些什么,可创建两个空项目,看看Django创建了什么。新建一个文件夹,并给它指定简单的名称,如snap_gram或insta_chat(不要在目录learning_log中新建该文件夹)。在终端中切换到该文件夹,并创建一个虚拟环境。在这个虚拟环境中,安装Django,并执行命令django-admin.py startproject snap_gram . (千万不要忘了这个命令末尾的句点)。
看看这个命令创建了哪些文件和文件夹,并与项目“学习笔记”包含的文件和文件夹进行比较。这样多做几次,直到你对Django新建项目时创建的东西了如指掌。然后,将项目目录删除(如果你想这样做的话)。