介绍
如果您一直关注我们的 Django 开发系列教程,那么您已经成功创建了一个 Django 应用程序,该应用程序允许具有管理员权限的用户通过 Django 管理界面仪表板添加评论和帖子。您还使用 Django 的对象关系映射 (ORM) 解决方案模型和 MySQL 设置了数据持久化。.
在本教程中,我们将创建 Django 视图,使我们的 Web 应用程序能够正确处理 Web 请求并返回所需的 Web 响应。正如 Django 文档中所定义,Web 响应可以是网页的 HTML 内容、重定向或 HTTP 错误(例如 404)。视图函数的代码理论上可以位于项目中的任何位置,只要它位于 Python 路径中即可。但是,对于包含这些视图函数的文件的命名和放置有一些常见的约定,我们将遵循这些步骤。.
完成本教程中的步骤后,您的 Django 博客网站会将最新文章拉取到您的 IP 地址或域名/文章 URL。.
先决条件
本教程是 Django 开发系列教程的一部分,也是该系列教程的续篇。.
如果您之前没有关注过本系列文章,我们在此做出以下假设:
- 您已安装 Django 版本 4 或更高版本。.
- 您已将 Django 应用程序连接到数据库。.
- 您正在使用基于 Unix 的操作系统,最好是 Ubuntu 22.04 云服务器,因为这是我们测试过的系统。.
- 您已设置好 Django 管理界面。.
由于本指南主要针对 Django 视图,即使您的设置不同,您也可能能够按照本指南进行操作。.
步骤 1 – 创建显示函数
在终端中,您首先需要导航到相应的目录并激活 Python 虚拟环境。如果您一直按照本系列教程操作,则可以输入以下命令。在开发应用程序时,务必始终使用 Python 编程环境,以确保代码的完整性和正确设置。.
cd ~/my_blog_app
. env/bin/activate现在虚拟环境已经启用,让我们进入网站的博客目录,在那里我们将打开一个 Python 文件并创建我们的第一个视图函数。.
cd ~/my_blog_app/blog/blogsite使用 nano 或您选择的文本编辑器打开 views.py 文件进行编辑。.
nano views.py打开文件后,其中应该包含类似这样的代码:
from django.shortcuts import render
# Create your views here.我们保留了从 django.shortcuts 库导入 render() 函数的 import 语句。render() 函数允许我们将模板和文本结合起来,返回相应的 HttpResponse 对象。请记住这一点,因为对于我们编写的每个视图,我们都需要负责实例化、填充和返回 HttpResponse 对象。.
接下来,我们将添加第一个视图,用于欢迎用户访问首页。我们将从 Django 的 http 库中导入 HttpResponse() 函数。使用该函数,我们将发送一些文本,以便在请求网页时显示。.
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello, welcome to the index page.')之后,我们添加另一个函数,用于显示我们将在本教程后面创建的各个帖子。.
...
def individual_post(request):
return HttpResponse('Hi, this is where an individual post will be.')最终的 views.py 文件现在看起来会像这样。.
from django.http import HttpResponse
from django.shortcuts import render
def index(request):
return HttpResponse('Hello, welcome to the index page.')
def individual_post(request):
return HttpResponse('Hi, this is where an individual post will be.')文件编辑完成后,请务必保存并退出。在nano编辑器中,您可以按Ctrl+X,然后按Y,最后按Enter。.
目前,这些函数还没有指向特定的 URL,因此我们需要将其添加到 URL 配置文件中的 URL 模式块中。添加视图后,让我们通过此配置文件将 URL 映射到它们,以便我们可以查看已创建的页面。.
步骤 2 – 向视图显示 URL
使用 Django,我们可以为应用程序设计自定义 URL。这完全使用 Python 编写,通过一个名为 URLconf 或«URL 配置»的文件来实现。.
要显示网页,Django 首先必须确定要使用的根 URLconf 模块,然后查找 URL 模式(一个包含所有 URL 模式的列表数据结构)。Django 会遍历每个 URL 模式,直到找到第一个匹配项。找到匹配项后,Django 会找到关联的视图,该视图函数会接收 URL 模式的数据和一个 HttpRequest 对象。如果在此过程中的任何一点发生故障,则会显示一个错误处理视图。.
在本节中,我们将使用应用程序中两个不同目录中的两个不同的 urls.py 文件。.
进入 ~/my_blog_app/blog/blogsite 目录后,打开 urls.py 文件(也称为 URL 配置文件)进行编辑。这里我们将使用 nano 编辑器来编辑该文件。.
nano urls.py修改该文件,使其看起来像下面的文件,并包含一个 urlpatterns 列表。.
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('post/', views.individual_post, name='individual_post')
]添加完以上代码后,保存并关闭文件。.
当我们更新博客目录的 URLconf 文件时,必须将其放入博客目录的 URLconf 文件夹中,否则 Django 将无法识别。这是因为在我们的配置文件中,它被设置为 ROOT_URLCONF。这意味着 Django 会从博客目录的 URLconf 中查找 URL 模式。.
要将博客 URLconf 包含在博客 URLconf 中,您需要进入该目录。.
cd ~/my_blog_app/blog/blog找到后,您可以使用 nano 或其他您选择的文本编辑器打开 URLconf 文件。.
nano urls.py在这个文件中,我们添加以下几行,以包含我们刚刚处理过的 /blogsite/urls.py 文件,如第二行所示。.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blogsite.urls'))
]保存并关闭文件。.
现在,让我们打开浏览器,访问我们创建的 URL,并验证它们是否显示了我们添加到视图中的文本。我们需要进入父目录才能访问提供 Django 应用程序的 manager.py 文件。.
cd ..请执行以下命令。您可以将下面的 0.0.0.0 替换为您的 IP 地址。.
python manage.py runserver 0.0.0.0:8000在您的网络浏览器中,访问您的 IP 地址,端口 8000:
your-server-ip:8000您将看到类似如下的网页:
然后前往以下地址:
your-server-ip:8000/post/
此处应显示以下网页:
既然我们已经验证了两个 urls.py 文件都能正常工作,并且数据显示的内容也完全符合我们的预期,那么让我们向博客添加一些真实数据吧。.
步骤 3 – 创建博客文章
现在你已经了解了 URL 模式和视图的基本工作原理,让我们添加一篇博客文章,并将其显示在网页上,而不是显示在 Python 文件中编写的文本上。.
我们将通过之前设置的管理页面创建一篇文章。在您的服务器运行 Django 应用程序后,请使用 Web 浏览器访问以下地址的博客管理页面:
your-server-ip:8000/admin/blogsite/在界面中,点击“文章”行中的“+ 添加”链接,将示例博客文章填充到数据库中。.
点击链接后,您将看到如下所示的输入表单:
每当您想要添加帖子时,请前往此页面。或者,您也可以使用编辑链接编辑帖子。.
在表单中,您可以编辑以下字段:
- 标题请在此处添加您想要的博客文章标题,例如“我的第一篇博客文章”。.
- 别名(SLUG):这是 URL 中用于标识有效网址元素的、包含易于理解的关键词的部分。它通常取自页面标题,因此在本例中我们可以使用 my-first-blog-post。.
- 内容:这是您的博客文章正文。为了便于举例,我们这里只添加“Hello, World!”,但您可以在这里添加更多文字。.
- 作者:请在此处添加您的姓名或用户名。我们将使用 Sami 作为您的用户名。.
请根据您的测试目的,酌情填写博客文章表格。.
将示例数据添加到页面后,点击“保存”按钮。您将看到以下确认页面:
恭喜!您已创建了您的第一篇博客文章!
接下来,我们检查一下它是否已将我们刚刚输入到管理界面中的数据添加到 MySQL 数据库中。.
步骤 4 – 显示数据库数据
现在我们需要访问 MySQL 数据库,所以请在终端中输入 CTRL + C 停止当前服务器进程,然后打开 MySQL 解释器。我们 Django 应用数据库的用户名是 djangouser,但请确保使用适合您项目的用户。.
mysql -u djangouser进入 MySQL 提示符后,导航到 blog_data 数据库(或任何适合您项目的数据库):
use blog_data;然后显示 blogsite_post 表的内容。.
select * from blogsite_post;您将获得类似下面的输出,其中应显示您添加到管理界面的信息。.
Output
+----+--------------------+--------------------+---------------+----------------------------+--------+
| id | title | slug | content | created_on | author |
+----+--------------------+--------------------+---------------+----------------------------+--------+
| 1 | My First Blog Post | my-first-blog-post | Hello, World! | 2020-05-14 00:30:03.186564 | Sammy |
+----+--------------------+--------------------+---------------+----------------------------+--------+
1 row in set (0.00 sec)如输出所示,其中包含我们添加的帖子数据。现在,让我们在帖子视图函数中引用这些数据。按 CTRL + D 退出 MySQL 解释器。.
找到网站博客应用程序中 views.py 文件所在的位置。.
cd ~/my_blog_app/blog/blogsite现在打开文件,以便我们添加新信息。.
nano views.py按照下面的示例编辑文件。.
from django.shortcuts import render
from django.http import HttpResponse
from .models import Post
def index(request):
return HttpResponse('Hello, welcome to the index page.')
def individual_post(request):
recent_post = Post.objects.get(id__exact=1)
return HttpResponse(recent_post.title + ': ' + recent_post.content)在上面的代码中,我们添加了一条额外的 Post 导入语句。我们还从 HttpResponse 中移除了带引号的字符串,并将其替换为我们的博客文章数据。要引用特定对象的数据,我们使用与要显示的对象关联的博客文章 ID,并将该 ID 存储在名为 last_post 的变量中。然后,我们可以通过在字段名称后添加点号分隔符来检索该对象中的特定字段。.
保存并关闭文件后,导航到 manager.py 文件所在的位置以运行 Django 应用程序。.
cd ~/my_blog_app/blog
python manage.py runserver 0.0.0.0:8000在网页浏览器中,访问以下地址:
your-server-ip:8000/post/
在这里,我们将看到我们所做的更改。页面将与此类似,显示您添加到帖子中的文本。.
检查完页面后,在终端中按 CTRL + C 停止执行过程。.
要禁用您的开发环境,您可以输入 disable 命令,然后从服务器注销。.
结果
在本教程中,我们创建了视图,映射了 URL 模式,并将博客文章数据库中的文本显示在了网页上。.
下一篇教程将介绍如何使用 HTML 创建更美观的 Django 模板。到目前为止,本系列教程已经涵盖了 Django 模型和 Django 视图。模板是 Django 应用程序基础架构中最后一个重要的组成部分。.
















