Django是网络开发中使用最多的Python框架。它的内置功能和稳健的结构使它成为构建网络应用程序时的绝佳选择。但是,外面的资源太多,要把这些知识应用到真实世界的项目中,有时会让人不知所措。在本教程中,我们将建立一个全栈式的Web应用,在后端使用Django,在前端使用Bootstrap风格的Django模板。
要求
要从本教程中获得最大的收获,你最好能掌握以下内容。
- Python的基础知识
- Python中的面向对象编程
- Django网络框架的基础知识
如果你以前没有使用Django的经验,不要害怕继续学习本教程。这将是一个循序渐进的过程,每一步都将得到解释。
在开始之前,我想向你介绍你的新的最佳盟友,Django文档。我们将在整个文章中引用它,所以请务必熟悉它。
一个Django照片分享应用程序
本教程的所有源代码都可以在这个GitHub repo上找到。
一个项目的复杂性取决于我们想要包含的所有功能。我们想提供给用户的功能越多,我们就需要花更多的时间来构建和整合所有的东西到一个独特的项目中。
考虑到这一点,我们将看到我们要建立的和不建立的东西之间的快速区别。
我们要建立的东西
在本教程中,我们将建立一个全栈(后端和前端开发)的照片共享应用程序。我们的应用程序将包括以下功能。
- CRUD(创建、读取、更新、删除)数据库功能
- 一个用户管理系统,以便用户能够创建账户、上传照片、查看其他人的照片并编辑或删除自己的照片
- 一个用Bootstrap制作的简单网页界面
注意:虽然这个应用程序看起来与社交网络很相似,但它并不是一个。像Instagram或Twitter这样的应用有很多复杂性,不可能在一篇文章中涵盖。
技术栈
让我们定义一下我们要使用的技术。当我们需要使用时,我们会介绍每一项的安装过程。
在后端,Django将是这个应用程序的核心框架。它允许我们定义URLs,定义逻辑,管理用户认证,并通过DjangoORM(对象关系映射器)控制所有的数据库操作。
此外,我们还将使用几个第三方软件包来加速一些功能的开发。
Django-taggit为我们提供了在几个步骤内建立一个简单的标签系统的能力。Pillow是一个提供Django图片处理能力的Python包。最后,Django-crispy-forms为我们提供了一个显示Bootstrap表单的简单方法。
在前端,我们将使用Django模板语言,它由动态显示数据的HTML文件组成。
我们还将使用Bootstrap 5(撰写本文时的最新版本)来设计网站。
注意:你可以随时在requirements.txt文件中查看这个项目所使用的依赖性。
创建一个Django项目
让我们从Django开始吧!
首先,确保你已经安装了Python 3。大多数Linux和macOS系统已经安装了Python,但如果你使用Windows,你可以查看Python 3安装指南。
注意:我们将在教程中使用Unix命令(macOS和Linux)。如果你因为任何原因不能执行它们,你可以使用一个图形化的文件管理器。
在一些linux发行版中,python 命令指的是Python 2。在其他版本中,python 根本就不存在。
让我们看看你需要使用什么Python命令来跟读。打开你的终端(在 Unix 上)或命令行窗口(在 Windows 上),输入python --version 。
python --version
# My result
Python 3.9.5
如果你有一个3.6以上的Python版本,你就可以开始了。如果你没有正确的Python版本,你可能会得到类似以下的信息。
Command 'python' not found
Python 2.7.18
你需要运行的Python命令是python3 ,以便继续学习本教程。
python3 --version
Python 3.9.5
虚拟环境
虚拟环境是一个孤立的 Python 环境,它包括运行 Python 程序所需的所有文件。
虚拟环境是任何 Python (和 Django) 项目的关键部分,因为它让我们能够管理并与其他人共享依赖关系 (项目所依赖的外部包)。
要在本地创建一个虚拟环境,我们将使用内置模块venv ,从 Python 3.6 或更高版本开始可用。
下面的命令将创建一个虚拟环境,名称为.venv (如果你愿意,你可以选择另一个名字)。
python -m venv .venv
如果你使用的是Ubuntu Linux,或者其他基于Debian的发行版,你有可能会得到以下信息。
The virtual environment was not created successfully because pip is not available ...
为了解决这个问题,你可以运行以下命令。
sudo apt-get install python3-venv
如果上面的命令不起作用,你可以使用virtualenv,它是另一个处理虚拟环境的库。
virtualenv .venv
运行这个命令后,将出现一个名为.venv (或你选择的名字)的文件夹。
我们安装的所有软件包都将放在这个目录中。
要激活一个虚拟环境,你需要根据你的操作系统来运行一个特定的命令。你可以参考下面的表格(摘自Python文档)。
| 平台 | 外壳 | 激活虚拟环境的命令 |
|---|---|---|
| POSIX | bash/zsh | $ source .venv/bin/activate |
| 鱼 | $ source .venv/bin/activate.fish | |
| csh/tcsh | $ source .venv/bin/activate.csh | |
| PowerShell核心 | $ .venv/bin/Activate.ps1 | |
| Windows | cmd.exe | C:> .venv/Scripts/activate.bat |
| PowerShell | PS C:> .venv\Scripts\Activate.ps1 |
因为我在一个POSIX操作系统上使用bash shell,所以我就用这个。
source .venv/bin/activate
请注意,一旦我激活了virtualenv ,就会在我的shell中添加一个.venv 的标题。
安装Django
Django是一个外部包,所以我们需要用pip来安装它。
pip install django
# Use pip3 if the command above doesn't work
pip3 install django
注意:我们可以随时用pip freeze ,看看我们的venv 中安装的软件包。
接下来,让我们用命令行工具django-admin启动一个名字为config 的Django项目。
django-admin startproject config
在这里,config 是项目的名称,它被用来作为一个命名惯例,以保持你所有项目的结构相同。例如,Django cookiecutter使用这个约定名称来启动一个项目。
也就是说,你可以用其他任何名字创建项目。
运行这些命令后,你应该有一个Django项目的常规文件结构。你可以用命令行工具树,或者用任何文件管理器来检查它。
注意:如果你不能运行tree ,你就需要安装它。
$ tree config/
└── config
├── config
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
现在让我们用cd 进入项目文件夹,并运行服务器以检查一切设置是否正确。
cd config/
python manage.py runserver
你会看到一条警告信息,指出有一些未应用的迁移。这是一条完全正常的信息,我们将在 "创建照片模型"部分学习如何运行迁移。
现在,在你的浏览器中访问localhost:8000。你应该看到标志性的Django祝贺页面。
启动照片共享应用程序
manage.py文件的功能与django-admin 完全相同,所以在本教程中我们将多次使用它。
它的位置在项目的根目录下,每次我们想用它来运行一个命令时,都需要输入项目目录。
记住总是用ls ,列出你所在目录的文件,以检查我们是否在正确的位置。
$ ls
Another-files.. manage.py
记住这些提示,现在是启动项目主程序的时候了。要做到这一点,我们打开一个新的shell(所以本地服务器仍在运行),并使用manage.py ,命令是startapp 。
注意:每次我们打开一个新的shell会话,我们都需要再次激活虚拟环境。
source .venv/bin/activate
cd config
python manage.py startapp photoapp
在这种情况下,应用程序的名称是photoapp。再一次,你可以用你想要的任何名字来创建它。
每次我们创建一个应用程序时,我们必须安装它。我们可以在config/settings.py 文件中通过在INSTALLED_APPS 变量中添加photoapp 来完成。
# config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
...
# Custom apps
'photoapp',
]
接下来,我们将进入app目录并创建一个空的urls.py 文件。我们可以通过运行touch ,或者用图形化的文件管理器来创建它。
cd photoapp/
touch urls.py
最后,让我们在整个项目中包括照片共享应用程序的所有URL模式。为了实现这一目标,我们将使用django.urls.include 函数。
# config/urls.py
from django.urls import path, include # Import this function
urlpatterns = [
path('admin/', admin.site.urls),
# Main app
path('', include('photoapp.urls')),
]
上面的代码将包括photoapp/urls.py 的所有URL模式到项目中。
如果你看一下服务器运行的外壳,你会看到一个错误。
raise ImproperlyConfigured(msg.format(name=self.urlconf_name)) ....
这是因为我们还没有在photopp/urls.py 文件内创建urlpatterns 列表。
为了解决这个问题,创建一个名为urlpatterns 的空列表。稍后我们将用Django路径来填充这个变量。
# photoapp/urls.py
# Empty patterns
urlpatterns = [
]
注意:使用这种方法的好处是,我们可以使照片应用程序可重复使用,因为它包括所有需要的代码在里面。
继续阅读:在SitePoint 上用Django建立一个照片分享的应用程序。