01-从 Django 开始

AI悦创原创
  • django体系课
  • django体系课
大约 14 分钟

你好,我是悦创。

当今的网站实际上都是富应用程序(rich application),就像成熟的桌面应用程序一样。Python 提供了一组开发 Web 应用程序的卓越工 具。在本章中,你将学习如何使用 Djangoopen in new window 来开发一个名为“学习笔记”(Learning Log)的项目,这是一个在线日志系统,让你能够记录所学习的有关特定主题的知识。

我们将为这个项目制定规范,然后为应用程序使用的数据定义模型。我们将使用 Django 的管理系统来输入一些初始数据,再学习编写视图和模板,让 Django 能够为我们的网站创建网页。

Django 是一个 Web 框架——一套用于帮助开发交互式网站的工具。Django 能够响应网页请求,还能让你更轻松地读写数据库、管理用户等。在后面,我们将改进“学习笔记”项目,再将其部署到活动的服务器,让你和你的朋友能够使用它。

1. 建立项目

建立项目时,首先需要以规范的方式对项目进行描述,再建立虚拟环境,以便在其中创建项目。


1.1 制定规范

完整的规范详细说明了项目的目标,阐述了项目的功能,并讨论了项目的外观和用户界面。 与任何良好的项目规划和商业计划书一样,规范应突出重点,帮助避免项目偏离轨道。这里不会制定完整的项目规划,而只列出一些明确的目标,以突出开发的重点。我们制定的规范如下:

提示

我们要编写一个名为“学习笔记”的 Web 应用程序,让用户能够记录感兴趣的主题,并在学习每个主题的过程中添加日志条目。“学习笔记”的主页对这个网站进行描述,并邀请用户注册或登录。用户登录后,就可创建新主题、添加新条目以及阅读既有的条目。

学习新的主题时,记录学到的知识可帮助跟踪和复习这些知识。优秀的应用程序让这个记录过程简单易行。


1.2 建立虚拟环境

要使用 Django,首先需要建立一个虚拟工作环境。虚拟环境是系统的一个位置,你可以在其中安装包,并将其与其他 Python 包隔离。将项目的库与其他项目分离是有益的,且为了在之后将“学习笔记”部署到服务器,这也是必须的。

为项目新建一个目录,将其命名为 learning_log ,再在终端中切换到这个目录,并创建一个虚拟环境。如果你使用的是 Python3,可使用如下命令来创建虚拟环境:

➜  Django-Study-Notes git:(main) cd learning_log
➜  learning_log git:(main) python3 -m venv ll_env
➜  learning_log git:(main)

这里运行了模块 venv,并使用它来创建一个名为 ll_env 的虚拟环境。如果这样做管用,请跳 到后面的 【1.4节】;如果不管用,请阅读 【1.3】节。


1.3 安装 virtualenv

如果你使用的是较早的 Python 版本,或者系统没有正确地设置,不能使用模块 venv,可安装 virtualenv 包。为此,可执行如下命令:

pip install --user virtualenv

提示

注意: 如果你使用的是 Linux 系统,且上面的做法不管用,可使用系统的包管理器来安装 virtualenv。例如,要在 Ubuntu 系统中安装 virtualenv,可使用命令sudo apt-get install python-virtualenv

在终端中切换到目录 learning_log,并像下面这样创建一个虚拟环境:

learning_log$ virtualenv ll_env
New python executable in ll_env/bin/python 
Installing setuptools, pip...done. 
learning_log$

提示

注意: 如果你的系统安装了多个 Python 版本,需要指定 virtualenv 使用的版本。例如,命令 virtualenv ll_env --python=python3 创建一个使用 Python3 的虚拟环境。


1.4 激活虚拟环境

建立虚拟环境后,需要使用下面的命令激活它:

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 git:(main) ✗ deactivate
➜  learning_log git:(main)

如果关闭运行虚拟环境的终端,虚拟环境也将不再处于活动状态。

1.5 安装 Django

创建并激活虚拟环境后,就可安装 Django 了:

➜  learning_log git:(main) ✗ source ll_env/bin/activate
(ll_env) ➜  learning_log git:(main) ✗ pip install django
Collecting django
  Using cached Django-4.1.3-py3-none-any.whl (8.1 MB)
Collecting sqlparse>=0.2.2
  Using cached sqlparse-0.4.3-py3-none-any.whl (42 kB)
Collecting asgiref<4,>=3.5.2
  Using cached asgiref-3.5.2-py3-none-any.whl (22 kB)
Installing collected packages: sqlparse, asgiref, django
Successfully installed asgiref-3.5.2 django-4.1.3 sqlparse-0.4.3

[notice] A new release of pip available: 22.2.2 -> 22.3.1
[notice] To update, run: pip install --upgrade pip
(ll_env) ➜  learning_log git:(main)

由于我们是在虚拟环境(独立的环境)中工作,因此在所有的系统中,安装 Django 的命令都相同:不需要指定标志 --user,也无需使用 python -m pip install package_name 这样较长的命令。

别忘了,Django 仅在虚拟环境处于活动状态时才可用。

提示

注意: 每隔大约8个月,Django 新版本就会发布,因此在你安装 Django 时,看到的可能是更新的版本。即便你使用的是更新的 Django 版本,这个项目也可行。如果要使用这里所示的 Django 版本,请使用命令 pip install django==4.1.* 安装 Django 4.1 的最新版本。如果你在使用更新的版本时遇到麻烦,请评论区留言。

1.6 在 Django 中创建项目

在依然处于活动的虚拟环境的情况下(ll_env包含在括号内),执行如下命令来新建一个项目:

(ll_env) ➜  learning_log git:(main) ✗ django-admin startproject learning_log .
(ll_env) ➜  learning_log git:(main) ✗ ls
learning_log ll_env       manage.py
(ll_env) ➜  learning_log git:(main) ✗ ls learning_log
__init__.py asgi.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.pyurls.pywsgi.py

  • 文件 settings.py 指定 Django 如何与你的系统交互以及如何管理项目。在开发项目的过程中,我们将修改其中一些设置,并添加一些设置。
  • 文件 urls.py 告诉 Django 应创建哪些网页来响应浏览器请求。
  • 文件 wsgi.py 帮助 Django 提供它创建的文件,这个文件名是 web server gateway interface (Web服务器网关接口)的首字母缩写。

1.7 创建数据库

Django 将大部分与项目相关的信息都存储在数据库中,因此我们需要创建一个供 Django 使用的数据库。为给项目“学习笔记”创建数据库,请在处于活动虚拟环境中的情况下执行下面的命令:

(ll_env) ➜  learning_log git:(main) python manage.py runserver  # 可以运行测试看看,红色提示你创建数据库
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
November 17, 2022 - 07:00:43
Django version 4.1.3, using settings 'learning_log.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
^C%
(ll_env) ➜  learning_log git:(main) ✗ 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
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... 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 auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK
(ll_env) ➜  learning_log git:(main) ✗ ls
db.sqlite3   learning_log ll_env       manage.py

我们将修改数据库称为迁移数据库。首次执行命令 migrate 时,将让 Django 确保数据库与项目的当前状态匹配。在使用 SQLite (后面将更详细地介绍)的新项目中首次执行这个命令时, Django 将新建一个数据库。在执行 python manage.py migrate 处,Django 指出它将创建必要的数据库表,用于存储我们将在这个项目( Synchronize unmigrated apps,同步未迁移的应用程序)中使用的信息,再确保数据库结构与当前代码(Apply all migrations,应用所有的迁移)匹配。「用于存储执行管理和身份验证任务所需的信息。」

然后,我们运行了命令 ls,其输出表明 Django 又创建了一个文件——db.sqlite3。SQLite 是 一种使用单个文件的数据库,是编写简单应用程序的理想选择,因为它让你不用太关注数据库管理的问题。

提示

注意: 在虚拟环境中运行 manage.py 时,务必使用命令 python ,即便你在运行其他程序时使用的是另外的命令,如 python3 。在虚拟环境中,命令 python 指的是在虚拟环境中安装的 Python 版本。


1.8 查看项目

下面来核实 Django 是否正确地创建了项目。为此,可执行命令 runserver,如下所示:

(ll_env) ➜  learning_log git:(main) ✗ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
November 17, 2022 - 07:17:43
Django version 4.1.3, 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 服务器将进行响应:生成合适的页面,并将其发送给浏览器。

  • System check identified no issues (0 silenced). ,Django 通过检查确认正确地创建了项目;

  • Django version 4.1.3, using settings 'learning_log.settings' 它指出了使用的 Django 版本以及当前使用的设置文件的名称;

  • Starting development server at http://127.0.0.1:8000/,它指出了项目的 URL。URL http://127.0.0.1:8000/open in new window 表明项目 将在你的计算机(即 localhost )的端口 8000 上侦听请求。localhost 是一种只处理当前系统发出的请求,而不允许其他任何人查看你正在开发的网页的服务器。

现在打开一款 Web 浏览器,并输入URL:http://localhost:8000/open in new window;如果这不管用,请输入 http://127.0.0.1:8000/open in new window 。你将看到类似于下图所示的页面,这个页面是 Django 创建的,让你知道到目前为止一切正常。现在暂时不要关闭这个服务器。等你要关闭这个服务器时, 可切换到执行命令 runserver 时所在的终端窗口,再按 Ctrl + C。

image-20221117152345150

提示

注意: 如果出现错误消息 That port is already in use (指定端口被占用),请执行命令 python manage.py runserver 8001 ,让 Diango 使用另一个端口。如果这个端口也不可用,请不断执行上述命令,并逐渐增大其中的端口号,直到找到可用的端口。


1.9 动手试一试

提示

练习1-1:新项目

为深入了解 Django 都做了些什么,可创建两个空项目,看看 Django 创建了什么。新建一个文件夹,并给 它指定简单的名称,如 snap_graminsta_chat (不要在目录 learning_log 中新建该文件夹)。在终端中切换到该文件夹,并创建一个虚拟环境。在这个虚拟环境中,安装 Django,并执行 命令 django-admin startproject snap_gram . (千万不要忘了这个命令末尾的句点)。

看看这个命令创建了哪些文件和文件夹,并与项目“学习笔记”包含的文件和文件夹进行比较。这样多做几次,直到你对 Django 新建项目时创建的东西了如指掌。然后,将项目目录删除(如果你想这样做的话)。

2. 创建应用程序

Django 项目由一系列应用程序组成,它们协同工作让项目成为一个整体。本章只创建一个应用程序,它将完成项目的大部分工作。 在后面将添加一个管理用户账户的应用程序。

当前,在前面打开的终端窗口中应该还运行着 runserver 。请再打开一个终端窗口(或标签页),并切换到 manage.py 所在的目录。 激活虚拟环境,再执行命令 startapp :

➜  learning_log git:(main) ✗ source ll_env/bin/activate
(ll_env) ➜  learning_log git:(main) ✗ python manage.py startapp learning_logs
❶(ll_env) ➜  learning_log git:(main) ✗ ls
db.sqlite3    learning_log  learning_logs ll_env        manage.py
❷(ll_env) ➜  learning_log git:(main) ✗ ls learning_logs
__init__.py apps.py     models.py   views.py
admin.py    migrations  tests.py
(ll_env) ➜  learning_log git:(main)

命令 startapp appname 让 Django 搭建创建应用程序所需的基础设施。如果现在查看项目目录,将看到其中新增了文件夹 learning_logs(见❶)。

打开这个文件夹,看看 Django 都创建了什 么(见❷),其中最重要的文件是 models.pyadmin.pyviews.py。我们将使用models.py 来定义要在应用程序中管理的数据,稍后再介绍 admin.pyviews.py

2.1 定义模型

我们来想想涉及的数据。每位用户都需要在学习笔记中创建很多主题。用户输入的每个条目都与特定主题相关联,这些条目将以文本 的方式显示。我们还需要存储每个条目的时间戳,以便告诉用户各个条目都是什么时候创建的。

打开文件 models.py,看看它当前包含哪些内容:

models.pyopen in new window

from django.db import models

# Create your models here.

这里导入了模块 models ,并让我们创建自己的模型。模型告诉 Django 如何处理应用程序中存储的数据。在代码层面,模型就是一个类,就像前面讨论的每个类一样,包含属性和方法。下面是表示用户将存储的主题的模型:

欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!

公众号:AI悦创【二维码】

AI悦创·编程一对一

AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发、Linux、Web」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh

C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh

方法一:QQopen in new window

方法二:微信:Jiabcdefh

上次编辑于:
贡献者: AndersonHJB

你认为这篇文章怎么样?

  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度