如何为DjangoWeb开发创建视图

来自菜鸟教程
跳转至:导航、​搜索

介绍

如果您一直关注我们的 Django Development 系列,那么您已经成功创建了一个 Django 应用程序,该应用程序允许具有管理员权限的用户通过Django 的管理 UI 仪表板。 您还利用 MySQL 和 Django 的对象关系映射解决方案 models 设置了数据持久性。

在本教程中,我们将创建 Django views,使我们的 Web 应用程序能够正确处理 Web 请求并返回所需的 Web 响应。 正如 Django 文档 中定义的那样,Web 响应可以是网页的 HTML 内容、重定向或 HTTP 错误(例如 404)。 从技术上讲,视图函数的代码可以存在于项目中的任何位置,只要它位于 Python 路径上。 但是,存在一些流行的命名和放置这些视图函数的文件的约定,我们将遵循这些做法。

完成本教程的步骤后,您的 Django 博客站点会将最近的帖子拉入 your-IP-or-domain/post URL。

先决条件

本教程是 Django 开发系列 的一部分,是该系列的延续。

如果您没有关注本系列,我们将做出以下假设:

  • 您已安装 Django 版本 3 或更高版本。
  • 您已将 Django 应用程序连接到数据库。 我们使用的是 MySQL,您可以按照 Django 系列的第二部分“如何创建 Django 应用程序并将其连接到数据库”来实现这种连接。
  • 您正在使用基于 Unix 的操作系统,最好是 Ubuntu 20.04 云服务器,因为这是我们测试过的系统。 如果您想在类似的环境中设置 Django,请参阅我们的教程,“如何在 Ubuntu 20.04 上安装 Django 并设置开发环境。
  • 您已经设置了 Django 管理界面。 您可以按照我们的 Django 管理员教程 完成此操作。

由于本指南主要处理 Django 视图,因此即使您的设置有所不同,您也可以继续学习。

第 1 步 — 创建视图函数

在您的终端中,您首先需要进入相关目录并激活您的 Python 虚拟环境。 如果您一直在关注本系列,您可以输入以下命令。 在开发应用程序时始终使用 Python 编程环境非常重要,以确保包含您的代码并使用正确的设置。

cd ~/my_blog_app
. env/bin/activate

现在您的虚拟环境已激活,让我们导航到 blogsite 目录,我们将在其中打开一个 Python 文件并创建我们的第一个视图 函数

cd ~/my_blog_app/blog/blogsite

使用 nano 或您选择的文本编辑器打开 views.py 文件进行编辑。

nano views.py

打开文件后,应使用类似于以下的代码填充它:

/my_blog_app/blog/blogsite/views.py

from django.shortcuts import render

# Create your views here.

我们将保留从 django.shortcuts 库中导入 render() 函数的 import 语句render() 函数 允许我们结合模板和上下文,以便我们可以返回适当的 HttpResponse 对象。 请记住这一点,因为对于我们编写的每个视图,我们都负责实例化、填充和返回 HttpResponse

接下来,我们将添加我们的第一个视图,该视图将欢迎用户访问索引页面。 我们将从 Django http 库中导入 HttpResponse() 函数。 使用该函数,我们将传入要在请求网页时显示的文本。

~/my_blog_app/blog/blogsite/views.py

from django.shortcuts import render
from django.http import HttpResponse


def index(request):
    return HttpResponse('Hello, welcome to the index page.')

之后,我们将再添加一个函数,该函数将显示我们将在本教程后面创建的单个帖子。

~/my_blog_app/blog/blogsite/views.py

...
def individual_post(request):
    return HttpResponse('Hi, this is where an individual post will be.')

我们最终的 views.py 文件现在将如下所示。

~/my_blog_app/blog/blogsite/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 中,您可以按 CTRLX,然后按 Y,然后按 ENTER

目前,这些函数没有指向指定的 URL,因此我们必须将其添加到 URL 配置文件中的 urlpatterns 块中。 添加视图后,让我们继续通过此配置文件将 URL 映射到它们,以便我们可以查看我们创建的页面。

第 2 步 — 将 URL 映射到视图

使用 Django,我们可以设计自己的 URL 来与我们的应用程序一起使用。 这是在纯 Python 中通过使用通常称为 URLconf 或“URL 配置”文件的文件来完成的。

为了显示网页,Django 首先必须确定要使用的根 URLconf 模块,然后继续查找 urlpatterns,一个 列表数据结构 包含所有的 URL 模式。 然后,Django 会遍历每个 URL 模式,直到找到第一个匹配的模式。 一旦找到匹配项,Django 就会找到关联的视图,并且该视图函数将接收与 URL 模式和 HttpRequest 对象有关的数据。 如果在整个过程中的任何时候出现故障,则会显示 错误处理视图

在本节中,我们将在应用程序的两个不同目录中处理两个不同的 urls.py 文件。

~/my_blog_app/blog/blogsite 目录中,打开 urls.py 文件 - 也称为 URLconf 文件 - 进行编辑。 我们将在这里使用 nano 来编辑文件。

nano urls.py

更改文件,使其与下面的文件相同,并带有 urlpatterns 列表。

~/my_blog_app/blog/blogsite/urls.py

from django.urls import path
from . import views


urlpatterns = [
    path('', views.index, name='index'),
    path('post/', views.individual_post, name='individual_post')
]

添加完上述行后,保存并关闭文件。

一旦我们更新了 blogsite 目录的 URLconf 文件,我们会将它包含在 blog 目录的 URLconf 中,否则将无法识别。 我们需要这样做,因为它在我们的设置文件中设置为 ROOT_URLCONF。 这意味着 Django 正在查看 blog 目录的 urlpatterns 的 URLconf。

要将我们的 blogsite URLconf 包含在我们的 blog URLconf 中,我们需要导航到该目录。

cd ~/my_blog_app/blog/blog

到达那里后,您可以使用 nano 或您选择的其他文本编辑器打开 URLconf 文件。

nano urls.py

在此文件中,我们将添加以下行以包含我们刚刚使用的 /blogsite/urls.py 文件,如第二行所示。

~/my_blog_app/blog/blog/urls.py

from django.contrib import admin
from django.urls import include, path


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blogsite.urls'))
]

保存并关闭文件。

现在让我们打开一个 Web 浏览器,以便导航到我们创建的 URL,并验证它们是否显示了我们添加到视图中的文本。 我们需要进入父目录以访问为 Django 应用程序提供服务的 manage.py 文件。

cd ..

发出以下命令。 您可以在下面将 0.0.0.0 替换为您的 IP 地址。

python manage.py runserver 0.0.0.0:8000

在您的网络浏览器中,导航到您的 IP 地址,端口 8000:

your-server-ip:8000

您将收到类似于以下内容的网页:

接下来,导航到以下 URL:

your-server-ip:8000/post/

从这里,应显示以下网页:

我们现在已经验证了两个 urls.py 文件可以正常工作,并且数据准确地向我们展示了我们所期望的。 通过这个工作,让我们将一些真实数据添加到我们的博客中。

第 3 步 — 创建博文

现在您已经了解了 URL 模式和视图如何工作的基础知识,让我们添加一篇博客文章并将其显示在网页上,而不是我们硬编码到 Python 文件中的文本。

我们将通过我们 之前设置的 的管理页面创建一个帖子。 使用您的服务器为 Django 应用程序提供服务,使用 Web 浏览器导航到管理员 Blogsite 页面:

your-server-ip:8000/admin/blogsite/

在界面中,单击位于 Posts 行中的 + Add 链接,开始使用示例博客文章填充数据库。

单击链接后,您将收到如下输入表单:

每当您想添加帖子时,您都会转到此页面执行此操作。 或者,您可以使用 Change 链接编辑帖子。

在表单中,您将能够编辑以下字段:

场地 内容
Title 在此处添加您想要的博客文章标题,例如 My First Blog Post
Slug 这是指 URL 的一部分,它使用人类可读的关键字标识有效的 Web 地址元素。 这一般来源于页面的标题,所以在这种情况下我们可以使用my-first-blog-post
Content 这是您博客文章的正文。 我们将仅添加 Hello, World! 以作为示例,但这是您可以冗长的地方。
Author 在此字段中,添加您的相关名称或用户名。 我们将使用 Sammy

根据您的测试目的填写您认为合适的博客文章表格。

将示例数据添加到页面后,单击 SAVE 按钮。 您将收到以下确认页面:

恭喜! 您已经创建了您的第一篇博文!

接下来,让我们验证它是否在 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 解释器。

导航到 blogsite 应用程序内 views.py 文件的位置。

cd ~/my_blog_app/blog/blogsite

现在打开文件,以便我们可以包含我们的新数据。

nano views.py

将文件编辑为与下面的文件相同。

~/my_blog_app/blog/blogsite

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 添加了一个额外的 import 语句。 我们还从 HttpResponse 中删除了带引号的字符串,并将其替换为我们博客文章中的数据。 为了引用特定对象的数据,我们使用与要显示的对象关联的博客文章 ID,并将该 ID 存储在名为 recent_post 的变量中。 然后,我们可以通过在字段中附加句点分隔符来获取该对象的特定字段。

保存并关闭文件后,导航到 manage.py 文件的位置以运行 Django 应用程序。

cd ~/my_blog_app/blog
python manage.py runserver 0.0.0.0:8000

从 Web 浏览器中,导航到以下地址:

your-server-ip:8000/post/

在这里,我们将看到我们所做的更改; 该页面将与此类似,显示您添加到帖子中的文本。

检查完页面后,在终端中按 CTRL + C 以停止进程运行。

要停用您的编程环境,您可以键入 deactivate 命令,然后退出服务器。

结论

在本教程中,我们从博客文章数据库中创建了视图、映射 URL 模式并在网页上显示了文本。

下一个教程将介绍如何通过使用 HTML 来创建 Django 模板 ,从而使这更加美观。 到目前为止,本系列已经涵盖了 Django 模型和 Django 视图。 当涉及到 Django 应用程序的基础时,模板是最后一个关键部分。