Django官方网站提供的文档中包含一个编写Django的应用程序教程(文档地址:Writing your first Django app, part 1 | Django documentation | Django),本文接下来将会以此为例进行记录说明如何编写一个Django应用程序。
编写第一个Django应用程序,第一部分
我们通过学习官网提供的教程来完成基本民意应用程序的创建。它由两部分组成:
- 一个允许人们查看民意调查并投票的公共网站。
- 允许添加、更改和删除投票的管理站点。
创建投票应用程序
我们在上一篇文章中已经完成了Django的环境搭建,并且创建了一个项目,接下来的工作就是在这个创建的项目中进行的。
Django中编写的每个应用程序都包含一个遵循特定约定的Python包,Django附带了一个实用程序,可以自动生成应用程序的基本目录结构,因此我们可以专注于编写代码而不是创建目录。
项目与应用程序
项目和应用程序有什么区别?应用程序是一种执行某些操作的网络应用程序,例如博客系统、公共记录数据库或小型民意调查应用程序。项目是特定网站的配置和应用程序的集合。一个项目可以包含多个应用程序,一个应用程序可以位于多个项目中。
我们进入 mysite 目录中,在该目录下打开命令行程序输入以下命令:
# python manage.py startapp <应用程序名称>
python manage.py startapp polls
命令执行完成后,将会在mysite目录下创建一个名称为polls的目录,其布局如下所示:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
在该目录中编写投票应用程序。
编写第一个视图
我们现在来写第一个视图。打开文件 polls/view.py 并将以下代码放入其中:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're ate the polls index.")
这可能是Django中最简单的视图了。要调用视图,我们需要将其映射到URL——为此我们需要一个URLconf。
为了在polls目录中创建URLconf,我们创建一个名为 urls.py 的文件。创建完成后,我们的应用程序目录应该是下面这个样子的:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
在 polls/urls.py 文件中编写以下代码:
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index")
]
下一步是将URLconf指向 polls.urls 模块。在 mysite/urls.py 中添加 django.urls.include 导入,然后将在 urlpatterns 列表中插入 include(),我们得到以下代码:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path("polls/", include("polls.urls"))
]
include() 函数允许引用其它URLconf。每当Django遇到include()时,它都会截掉URL中与该点匹配的任何部分,并将剩余的字符串发送到包含的URLconf中进行进一步处理。
include() 背后的想法是让即插即用的URL变得容易。由于投票应用程序拥有其自己的URLconf(polls/urls.py),因此它们可以被放置在“/polls/”下,“/fun_polls/”下、“/content/polls”下或其它任何路径下,应用程序仍将正常运行。
什么时候使用include()
当你要包含其它URL模式匹配的时候你应该使用include()。admin.site.urls是唯一的例外。
我们现在已经将index视图连接到URLconf中,接下来我们看一下它是否正常工作。在命令行中输入以下命令启动开发服务器:
python manage.py runserver
启动成功后,我们在浏览器中访问 http://localhost:8000/polls/,不出意外的话,你应该会看到我们在index视图中定义的文本“Hello, world. You’re ate the polls index.”。
现在我们回过头来看一下path()函数。path()函数包含四个参数,其中有两个参数是必须的:分别是route和view,两个参数是可选的,分别是:kwargs和name。我们现在来看一下这四个参数的含义。
- route
- route是包含URL模式的字符串。处理请求时,Django从第一个模式开始,沿着urlpatterns列表向下进行移动,将请求的URL与每个模式进行比较,直到找到匹配的模式。
- 模式不搜索GET和POST参数或域名。例如:有一个对 https://www.example.com/myapp/ 的请求,URLconf将查找 myapp/。在请求 https://www.example.com/myapp/?page=3 中,URLconf同样会查找 myapp/。
- view
- 当Django找到匹配模式时,它会调用指定的视图函数,并将HttpRequest对象作为第一个参数,并将路由中的任何“捕获”值作为关键字参数。
- kwargs
- 任意关键字参数可以通过字典传递到目标视图。在官网的投票应用程序教程中,并不使用Django的这个功能。
- name
- 命名URL可以让我们从Django中的其它位置(尤其是在模板中)明确地引用它。这一强大的功能可以使我们对项目的URL模式进行全局更改,而这种更改只需要接触一个文件。
欢迎关注我的公众号