如何为 Django Web 开发创建视图

介绍

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

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

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

先决条件

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

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

由于本指南主要处理 Django 视图,因此即使您有一些不同的设置,您也可以遵循。

第 1 步 – 创建视图函数

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

  • cd ~/my_blog_app
  • . env/bin/activate

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

  • cd ~/my_blog_app/blog/blogsite

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

  • nano views.py

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

/my_blog_app/blog/blogsite/views.py
from django.shortcuts import render

# Create your views here.

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

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

~/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,因此我们必须将其添加到urlpatternsURL 配置文件中的块中。添加视图后,让我们继续通过此配置文件将 URL 映射到它们,以便我们可以查看我们创建的页面。

第 2 步 – 将 URL 映射到视图

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

为了显示网页,Django 首先必须确定URLconf要使用的根模块,然后继续查找包含所有 URL 模式urlpatterns列表数据结构然后 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目录的 URLconf 以获取urlpatterns.

要将我们的blogsiteURLconf包含在我们的blogURLconf 中,我们需要导航到该目录。

  • 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,并验证它们是否显示了我们添加到视图中的文本。我们需要进入父目录以访问manage.py为 Django 应用程序提供服务的文件。

  • cd ..

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

  • python manage.py runserver 0.0.0.0:8000

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

your-server-ip:8000

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

Django 初始索引页

接下来,导航到以下 URL:

your-server-ip:8000/post/

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

Django 初始帖子页面

我们现在已经验证了这两个urls.py文件是否有效,并且数据向我们显示了我们所期望的。通过这项工作,让我们在博客中添加一些真实数据。

第 3 步 – 创建博客文章

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

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

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

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

Django 博客站点管理页面

单击该链接后,您将收到一个输入表单,如下所示:

Django 添加帖子表单

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

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

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

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

Django 填写的博客帖子表单

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

Django 帖子提交成功

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

接下来,让我们验证它是否向 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内文件的位置blogsite

  • 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) 

在上面的代码中,我们importPost. 我们还从 中删除了带引号的字符串,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/

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

Django 提供的博客文章

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

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

结论

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

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

觉得文章有用?

点个广告表达一下你的爱意吧 !😁