建立项目

在开始开发像网络应用程序这样重要的项目时,首先需要在规范(或规格)中描述项目的目标。一旦有了一套明确的目标,就可以开始确定实现这些目标的可行任务。

在本节中,我们将编写学习日志规范,并开始项目第一阶段的工作。这将包括建立虚拟环境和构建 Django 项目的初始部分。

编写规范

一份完整的规格书要详细说明项目目标,描述项目功能,并讨论其外观和用户界面。就像任何好的项目或商业计划一样,规范应该让你集中精力,帮助你的项目步入正轨。我们不会在这里编写完整的项目规范,但我们会列出一些明确的目标,使开发过程保持专注。以下是我们将使用的规格:

我们将编写一个名为 "学习日志" 的网络应用程序,允许用户记录他们感兴趣的主题,并在学习每个主题时撰写日志条目。学习日志 "主页将介绍该网站,并邀请用户注册或登录。登录后,用户可以创建新主题、添加新条目、阅读和编辑现有条目。

当你在研究一个新的课题时,记录所学到的知识可以帮助你追踪新信息和已经找到的信息。在学习技术科目时尤其如此。一个好的应用程序,比如我们要创建的应用程序,可以帮助提高这一过程的效率。

创建虚拟环境

要使用 Django,我们首先要建立一个虚拟环境。虚拟环境是在系统中安装软件包并将它们与其他所有 Python 软件包隔离的地方。将一个项目的库与其他项目分开是有益的,在第 20 章中我们将 Learning Log 部署到服务器时也需要这样做。

为你的项目创建一个名为 learning_log 的新目录,在终端切换到该目录,然后输入下面的代码来创建一个虚拟环境:

learning_log$ python -m venv ll_env
learning_log$

在这里,我们运行 venv 虚拟环境模块,并用它创建一个名为 ll_env 的环境(注意,这个名字是以两个小写的 Ls 开头,而不是两个 1)。如果你在运行程序或安装软件包时使用 python3 等命令,请确保在此处使用该命令。

激活虚拟环境

现在,我们需要使用以下命令激活虚拟环境:

learning_log$ source ll_env/bin/activate
(ll_env)learning_log$

该命令运行 ll_env/bin/ 中的脚本 activate。环境激活后,你会看到括号中的环境名称。这表明你可以在环境中安装新软件包,也可以使用已安装的软件包。当环境处于非激活状态时,你在 ll_env 中安装的软件包将不可用。

如果使用的是 Windows,请使用 ll_env\Scripts\activate(不带 source 字样)命令激活虚拟环境。如果使用的是 PowerShell,则可能需要大写 "激活"。

要停止使用虚拟环境,请输入 deactivate

(ll_env)learning_log$ deactivate
learning_log$

关闭运行环境的终端后,该环境也将处于非活动状态。

安装 Django

激活虚拟环境后,输入以下内容更新 pip 并安装 Django:

(ll_env)learning_log$ pip install --upgrade pip
(ll_env)learning_log$ pip install django
Collecting django
--snip--
Installing collected packages: sqlparse, asgiref, django
Successfully installed asgiref-3.5.2 django-4.1 sqlparse-0.4.2
(ll_env)learning_log$

由于 pip 会从各种来源下载资源,因此需要经常升级。在创建新的虚拟环境时,最好升级 pip。

我们现在使用的是虚拟环境,因此安装 Django 的命令在所有系统上都是一样的。无需使用较长的命令,如 python -m pip install package_name,也无需包含 --user 标志。请记住,只有当 ll_env 环境处于活动状态时,Django 才可用。

Django 大约每八个月发布一个新版本,因此您在安装 Django 时可能会看到一个更新的版本。即使在较新版本的 Django 上,本项目也很有可能按照这里所写的运行。如果你想确保使用与此处相同版本的 Django,请使用 pip install django==4.1.* 命令。这将安装最新版本的 Django 4.1。如果您遇到与使用版本相关的任何问题,请参阅本书的在线资源 https://ehmatthes.github.io/pcc_3e

在 Django 中创建项目

在不离开活动虚拟环境的情况下(记住在终端提示符中查找括号内的 ll_env),输入以下命令创建一个新项目:

❶ (ll_env)learning_log$ django-admin startproject ll_project .
❷ (ll_env)learning_log$ ls
ll_env ll_project manage.py
❸ (ll_env)learning_log$ ls ll_project
__init__.py asgi.py settings.py urls.py wsgi.py

startproject 命令❶ 告诉 Django 建立一个名为 ll_project 的新项目。命令末尾的点(.)创建了一个新项目,其目录结构便于我们在开发完成后将应用程序部署到服务器上。

不要忘记这个点,否则在部署应用程序时可能会遇到一些配置问题。如果忘记了这个点,请删除已创建的文件和文件夹(ll_env 除外),然后重新运行该命令。

运行 ls 命令(Windows 下为 dir)❷ 显示 Django 创建了一个名为 ll_project 的新目录。它还创建了一个 manage.py 文件,这是一个简短的程序,用于接收命令并将其发送到 Django 的相关部分。我们将使用这些命令来管理任务,例如处理数据库和运行服务器。

ll_project 目录包含四个文件❸;其中最重要的是 settings.pyurls.pywsgi.pysettings.py 文件控制着 Django 与系统交互和管理项目的方式。随着项目的发展,我们将修改其中的一些设置,并添加一些自己的设置。urls.py 文件告诉 Django 在响应浏览器请求时构建哪些页面。wsgi.py 文件帮助 Django 为其创建的文件提供服务。文件名是 "Web 服务器网关接口" 的首字母缩写。

创建数据库

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 ll_env ll_project manage.py

每次修改数据库时,我们都会说我们正在迁移数据库。第一次发布 migrate 命令时,Django 会确保数据库与项目的当前状态相匹配。第一次在使用 SQLite 的新项目中运行该命令时(稍后将详细介绍 SQLite),Django 会为我们创建一个新数据库。在这里,Django 报告说它将准备好数据库,以存储处理管理和身份验证任务所需的信息❶。

运行 ls 命令显示 Django 创建了另一个名为 db.sqlite3 ❷的文件。SQLite 是一种通过单个文件运行的数据库;它非常适合编写简单的应用程序,因为您无需过多关注数据库的管理。

在活动的虚拟环境中,使用 python 命令运行 manage.py 命令,即使使用不同的命令(如 python3)运行其他程序也是如此。在虚拟环境中,命令 python 指的是创建虚拟环境时使用的 Python 版本。

查看项目

让我们确保 Django 已正确设置了项目。输入 runserver 命令查看项目的当前状态:

(ll_env)learning_log$ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
❶ System check identified no issues (0 silenced).
May 19, 2022 - 21:52:35
❷ Django version 4.1, using settings 'll_project.settings'
❸ Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Django 会启动一个名为开发服务器的服务器,这样您就可以在系统上查看项目的运行情况。当您在浏览器中输入 URL 请求页面时,Django 服务器会响应该请求,构建相应的页面并将其发送到浏览器。

Django 首先检查以确保项目设置正确❶;然后报告正在使用的 Django 版本和正在使用的设置文件名称❷。最后,它会报告项目正在服务的 URL ❸。URL http://127.0.0.1:8000/ 表示项目正在您计算机上的 8000 端口监听请求,该端口称为 localhost。所谓本地主机,是指只在你的系统上处理请求的服务器;它不允许其他人看到你正在开发的网页。

打开网页浏览器,输入 URL http://localhost:8000/,如果第一个 URL 无效,则输入 http://127.0.0.1:8000/。你应该会看到类似图 18- 1 的内容:Django 创建的页面,让你知道目前一切运行正常。暂时保持服务器运行,但要停止服务器时,请在发出运行服务器命令的终端按下 CTRL-C。

image 2023 12 05 09 41 33 608
Figure 1. Figure 18-1: Everything is working so far.

如果收到 "该端口已被使用" 的错误信息,请输入 python manage.py runserver 8001,然后循环使用更高的端口号,直到找到一个开放的端口,告诉 Django 使用其他端口。

亲身体验

18-1. 新项目:为了更好地了解 Django 的工作,请创建几个空项目并查看 Django 创建的内容。新建一个名称简单的文件夹,如 tik_gram 或 insta_tok(在 learning_log 目录之外),在终端中导航到该文件夹,并创建一个虚拟环境。安装 Django 并运行命令 django-admin.py startproject tg_project . (确保在命令末尾包含圆点)。

查看该命令创建的文件和文件夹,并与学习日志进行比较。多做几次,直到熟悉了 Django 在启动新项目时创建的内容。然后根据需要删除项目目录。