如何创建Django网络开发的视图

129 阅读10分钟

简介

如果你一直在关注我们的Django开发系列,你已经成功创建了一个Django应用程序,允许具有管理权限的用户通过Django的管理用户界面仪表板添加评论帖子。你还通过利用MySQL和Django的对象关系映射解决方案**模型**建立了数据持久性。

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

一旦你完成了本教程的步骤,你的Django博客网站将把最近的文章拉到your-IP-or-domain/post

前提条件

本教程是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() 函数。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 目录的URLconf,以了解urlpatterns

为了将我们的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'))
]

保存并关闭该文件。

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

cd ..

发布以下命令。你可以在下面用你的IP地址替换0.0.0.0

python manage.py runserver 0.0.0.0:8000

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

your-server-ip:8000

你会收到一个类似于以下的网页。

Django Initial Index Page

接下来,导航到以下网址。

your-server-ip:8000/post/

从这里,应该会显示以下网页。

Django Initial Post Page

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

第3步 - 创建一个博文

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

我们将通过之前设置的管理页面创建一个帖子。在你的服务器为Django应用提供服务的情况下,使用网络浏览器导航到管理页面Blogsite ,在。

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

在界面中,点击位于Posts 行中的+ Add 链接,开始用一篇博文的例子填充数据库。

Django Blogsite Admin Page

点击该链接后,你会收到一个像这样的输入表格。

Django Add Post Form

每当你想添加一个帖子时,你就会到这个页面去这样做。另外,你也可以通过Change 链接来编辑帖子。

在该表格中,你可以编辑以下字段。

字段内容
Title在这里添加你想要的博客文章标题,例如My First Blog Post
Slug这指的是URL的一部分,它用人类可读的关键词来标识一个有效的网络地址元素。这通常是由页面的标题衍生出来的,所以在这种情况下我们可以使用my-first-blog-post
Content这是你的博客文章的正文。我们将只是为了举例而添加Hello, World! ,但这是你可以详细说明的地方。
Author在这个领域,添加你的相关名称或用户名。我们将使用Sammy

根据你的测试目的,按你认为合适的方式填写博文表格。

Django Filled Out Blog Post Form

一旦你将示例数据添加到页面中,点击SAVE 按钮。你会收到以下确认页面。

Django Post Submission Successful

祝贺你!你已经创建了你的第一个博客文章!

接下来,让我们验证一下,它是否已经向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

从一个网络浏览器中,导航到以下地址。

your-server-ip:8000/post/

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

Django Served Blog Post

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

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

总结

在本教程中,我们已经创建了视图,映射了URL模式,并在网页上显示了来自博文数据库的文本。

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