Views and URLconfs
在前面的介绍,我们有提到 Django 的 MTV 架构。其处理 request 的流程如下:
- 浏览器送出 HTTP request
- Django 依据 URL configuration 分配至对应的 View
- View 进行资料库的操作或其他运算,并回传
HttpResponse
物件 - 浏览器依据 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 URL 设定
最后,Django 需要知道 URL 与 view 的对应关係 。
例如:
有人浏览 http://127.0.0.1:8000/hello/ 时 , hello_world()
这个 view function 需要被执行。
而这个对应关係就是 URL conf (URL configuration)。
URL Conf
- 通常定义在
urls.py
- 是一连串的规则 (URL patterns)
- Django 收到 request 时,会一一比对 URL conf 中的规则,决定要执行哪个 view function
现在我们来设定 Hello World 范例的 URL conf。
首先打开 mysite/urls.py
,先 import 刚刚写的 view function,然后在 urlpatterns
中加入下面这行:
url(r'^hello/$', hello_world),
现在 mysite/urls.py
的内容应该会像下面这样:
# mysite/urls.py
from django.conf.urls import include, url
from django.contrib import admin
# Import view functions from trips app.
from trips.views import hello_world
urlpatterns = [
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
- 指的是
测试 Hello World
现在启动你的 web server。 (如果刚刚没关闭的话,通常 Django 会在你修改程式码后,自动重新启动 web server)
(djangogirls_venv) ~/djangogirls/mysite$ python manage.py runserver
在浏览器输入 http://127.0.0.1:8000/hello/ ,你会看到网页显示我们在 HttpResponse 传入的文字 Hello World!
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论