Views and URLconfs

2020-06-15 17:39 更新

Views and URLconfs

Django 处理 HTTP request 产生 response 的流程

在前面的介绍,我们有提到 Django 的 MTV 架构。其处理 request 的流程如下:

  1. 浏览器送出 HTTP Request
  2. Django 依据 URL Conf 分配至对应的 View
  3. View 进行资料库的操作或其他运算,并回传 Http Response 物件
  4. 浏览器依据 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!")

以上程式在做的事就是:

  1. 从 django.http 模组中引用 HttpResponse 类别
  2. 宣告 hello_world 这个 View
  3. 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!

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号