介绍
如果您关注了我们的Django 开发系列,那么您已经成功创建了一个 Django 应用程序,该应用程序允许具有管理员权限的用户通过 Django 的管理 UI 仪表板添加评论和帖子。您还通过利用 MySQL 和 Django 的对象关系映射解决方案模型来设置数据持久性。
在本教程中,我们将创建 Django视图,使我们的 Web 应用程序能够正确处理 Web 请求并返回所需的 Web 响应。正如Django 文档中所定义的,网络响应可以是网页的 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
views.py
使用 nano 或您选择的文本编辑器打开文件进行编辑。
- nano views.py
打开文件后,它应该填充类似于以下的代码:
from django.shortcuts import render
# Create your views here.
我们将保留从库中导入函数的import 语句。该函数允许我们组合模板和上下文,以便我们可以返回适当的对象。请记住这一点,因为对于我们编写的每个视图,我们都负责实例化、填充和返回.render()
django.shortcuts
render()
HttpResponse
HttpResponse
接下来,我们将添加第一个欢迎用户访问索引页面的视图。我们将从HttpResponse()
Djangohttp
库中导入该函数。使用该函数,我们将传入要在请求网页时显示的文本。
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,因此我们必须将其添加到urlpatterns
URL 配置文件中的块中。添加视图后,让我们继续通过此配置文件将 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
列表。
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
.
要将我们的blogsite
URLconf包含在我们的blog
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'))
]
保存并关闭文件。
现在让我们打开一个 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
您将收到类似于以下内容的网页:
接下来,导航到以下 URL:
your-server-ip:8000/post/
从这里,应显示以下网页:
我们现在已经验证了这两个urls.py
文件是否有效,并且数据向我们显示了我们所期望的。通过这项工作,让我们在博客中添加一些真实数据。
第 3 步 – 创建博客文章
现在您已经了解了 URL 模式和视图工作原理的基本原理,让我们添加一篇博文,并将其显示在网页上,而不是我们硬编码到 Python 文件中的文本。
我们将通过我们之前设置的管理页面创建一个帖子。在您的服务器为 Django 应用程序提供服务时,使用 Web 浏览器导航到管理Blogsite
页面:
your-server-ip:8000/admin/blogsite/
在界面中,单击+ Add
位于Posts
行中的链接以开始使用示例博客文章填充数据库。
单击该链接后,您将收到一个输入表单,如下所示:
每当您想添加帖子时,您都可以转到此页面进行添加。或者,您可以使用Change
链接编辑帖子。
在表单中,您将能够编辑以下字段:
场地 | 内容 |
---|---|
Title |
在此处添加您想要的博客文章标题,例如My First Blog Post 。 |
Slug |
这是指 URL 的一部分,它用人类可读的关键字标识有效的网址元素。这通常来自页面的标题,因此在这种情况下我们可以使用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的解释。
导航到应用程序views.py
内文件的位置blogsite
。
- 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)
在上面的代码中,我们import
为Post
. 我们还从 中删除了带引号的字符串,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 应用程序的基础时,模板是最后一个关键部分。