Django教程第二部分(创建视图)
首先
继续Django教程①(安装和创建项目)后,我们尝试创建一个应用程序。参考《实战Django教程》(基础篇),开始我们的第一个Django应用程序创作。
进行投票应用的创建
根据教程的指示,创建一个名为Polls的应用程序。(据说Polls意味着“民意调查”,不太清楚应用程序会是什么样子…)
应用程序可以放置在Python路径的任何位置,但在这里我们将其放置在manage.py相同的目录(即mysite目录下)。基本上,项目是最外层的大盒子,我们会在其中添加多个应用程序来构建。
$ cd mysite
$ python manage.py startapp polls
# polls ディレクトリ以下のファイルが自動で作成される
mysite (<- ベースディレクトリ)
|-- manage.py
|-- config (<- 設定ディレクトリ)
| |-- __init__.py
| |-- asgi.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
`-- polls (<- アプリケーション)
|-- __init__.py
|-- admin.py
|-- apps.py
|-- migrations
| `-- __init__.py
|-- models.py
|-- tests.py
`-- views.py
在Django教程第一部分(安装和创建项目)中创建了一个config,因此这里有一个config存在。但是,如果使用$ django-admin startproject mysite创建项目,则不是config而是mysite。
创建视图
视图在响应请求方面具有角色。在 Web 应用程序中,流程如下:①浏览器发送请求,②根据注册在 URLconf 中的配置,调用与请求的 URL 相匹配的视图,③将响应返回给浏览器。(实际上,涉及到数据库等复杂情况,但这只是一个简单的例子。)
在以下示例中进行视图和 URLconf 的设置以进行简单的尝试。视图在 polls/views.py 中,URLconf 的设置在 config/urls.py 中进行记录。
调查/视图.py
在编写视图函数时,有两种主要的方法:①基于函数的方法和②基于类的方法。在《实战 Django教程》(基础篇)这本实用教材中,推荐使用②基于类的方法。但在此处,我们遵循《初学 Django 应用开发指南》(第一部分)的要求,采用①基于函数的方法进行视图编写。(将在理解了②基于类的方法后再进行编写。)
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
index() 函数是一个简单的函数,它针对请求返回了一个预定的字符串(“Hello, world. You’re at the polls index.”)。
投票/urls.py 和 配置/urls.py
在上述中,我們提到可以在 config/urls.py 文件中記錄 URL 設置,但是當設置數量增加時,管理會變得非常困難,因此可以通過為每個應用創建 urls.py 文件來使代碼更易於理解。具體做法是,在 polls/urls.py 文件中記述與 Polls 應用有關的 URL 設定,然後在 config/urls.py 文件中導入每個應用的 URL 設定。當創建應用時,不會自動生成 polls/urls.py 文件,因此可以使用 $ touch polls/urls.py 命令創建該文件並寫入以下代碼。
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
path('', views.index, name='index'),
]
URLconf是通过将URL模式与视图函数的对应关系添加到名为urlpatterns的列表变量中来进行设置的。django.urls.path()函数可以通过将URL模式指定为第一个参数,并将与URL模式匹配的视图函数指定为第二个参数来进行设置。name可以给URL模式命名,从而可以通过反向解析来获取URL。另外,app_name是分配给每个应用程序的urls.py文件的命名空间,也可以用于反向解析,因此最好进行设置。(基本上,app_name应该与应用程序名称相同。)
然后在config/urls.py中反映polls/urls.py模块的描述。具体操作包括:①导入django.urls.include,②在urlpatterns列表中添加include()函数。
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
django.urls.include() 函数是一个可以引用其他URLconf的函数。通过path(‘polls/’, include(‘polls.urls’)),可以从polls/urls.py中引用以polls/开头的所有URL模式。这样,即使不在config/urls.py中记录全部设置,也可以通过include引用每个应用中设置的urls.py。
现在,index视图已经与URLconf绑定了。执行下面的命令,访问http://localhost:8000/polls/,你将看到由polls/views.py定义的”Hello, world. You’re at the polls index.”信息。在这种情况下,’polls/’被指定为config/urls.py中的路径,而在polls/urls.py中,”被指定为空。所以,在http://localhost:8000/polls/上将调用views.index()函数。
$ python manage.py runserver
最后
由于第1部分的Django应用程序创建教程只能触及到基础概念,我对其内容理解得不够深入。因此,我决定在阅读实用的Django教科书(基础篇)的同时继续进行教程。接下来,我打算继续进行第2部分的初次创建Django应用程序。
以下是有关文章的链接:
– Django教程①(安装和项目创建)
– Django教程③(模型创建、Django管理后台)
– Django教程④(模板)
– Django教程⑤(通用视图)
– Django教程⑥(自动测试)
– Django教程⑦(静态文件)