Views and URLconfs
Views and URLconfs
在前面的介绍,我们有提到 Django 的 MTV 架构。其处理 request 的流程如下:
- 浏览器送出 HTTP Request
- Django 依据 URL Conf 分配至对应的 View
- View 进行资料库的操作或其他运算,并回传 Http Response 物件
- 浏览器依据 HTTP Response,显示网页画面
这一章,我们将透过 Hello World 范例 ,瞭解 Django 如何处理一个 request 的流程。
Django Views
Django view 其实是一个 function,处理 HttpRequest 物件,并回传 HttpResponse 物件,大致说明如下:
-
会收到
HttpRequest 物件
参数: Django 从网页接收到 request 后,会将 request 中的资讯封装产生一个 HttpRequest 物件,并当成第一个参数,传入对应的 view function。 -
需要回传
HttpResponse物件
:HttpResponse 物件裡面包含: - HttpResponse.content
- HttpResponse.status_code ...等
建立第一个 View
首先建立一个名为 hello_world 的 View。
在trips/views.py
输入下列程式码:
# trips/views.py
from django.http import HttpResponse
def hello_world(request):
return HttpResponse("Hello World!")
以上程式在做的事就是:
- 从 django.http 模组中引用
HttpResponse
类别 - 宣告 hello_world 这个 View
- 当 hello_world 被呼叫时,回传包含字串
Hello World!
的 HttpResponse 物件。
Django Urls
最后,Django 需要知道 URL 与 View 的对应关係。
例如:
有人浏览
http://127.0.0.1:8000/hello/ ,hello_world()
这个 view function 需要被执行。
而这个对应关係就是 URL conf
(URL configuration)。
URL Conf
- 通常定义在
urls.py
- 是一连串的规则 (url pattern)
- Django 收到 request 时,会一一比对 URL Conf 中的规则,决定要执行哪个 view function
现在我们来设定,Hello World 范例的 URL Conf:
打开 startproject 时自动产生的urls.py
,先 import 刚刚写的 view function,然后在 urlpatterns
中加入下面这行:
url(r'^hello/$', hello_world),
现在 mysite/urls.py
的内容应该会像下面这样:
# mysite/urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
# import view functions from trips app
from trips.views import hello_world
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'mysite.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^hello/$', hello_world),
)
以上程式透过 url() function 传入两个参数 regex
, view
:
url(regex,view)
-
regex -- 定义的 URL 规则
- 规则以 regular expression 来表达
-
r'^hello/$' 代表的是
hello/
这种 URL -
view -- 对应的 view function
- 指的是
hello_world()
这个 view - 'trips.views.hello_world' --
trips
裡的views.py
中的hello_world()
function
测试 Hello World
现在,启动你的 web server。 (如果刚刚没关闭的话,通常 Django 会在你修改程式码后,自动重新启动 web server)
python manage.py runserver
在浏览器输入
http://127.0.0.1:8000/hello/,你会看到网页显示我们在 HttpResponse 传入的文字Hello World!
。
更多建议: