django(二)视图和URL配置

建立一份视图:

在上一节,使用django-admin.py startproject制做的mysite文件夹中,建立一个叫作views.py的空文件。这个Python模块健柏寒这一章的视图。html

views.py文件的内容:python

from django.http import HttpResponse

def hello(request):
    return HttpResponse("hell world")

咱们定义一个叫作hello的视图函数:web

每一个视图函数至少要有一个参数,一般被叫作request。这是一个触发这个视图、包含当前web请求信息的对象,是类django.http.HttpRequest的一个实例。在这个示例中,咱们虽然不用request作任何事,然而它仍必须是这个视图的第一个参数。正则表达式

这个函数仅仅返回一个HttpResponse对象,这个对象包含了文本"Hello world"。django

一个视图就是python的一个函数。这个函数的第一个参数的类型是HttpRequest;它返回一个HttpResponse实例。为了使python的函数成为一个django可识别的视图,它必须知足这两个条件。(也有例外)浏览器

 

激活视图函数,绑定视图函数和URL(URLconf):

要想在浏览器里看到咱们刚才写的内容,就要告诉项目mysite经过一个详细描述的URL来显示的而且激活这个视图。为了绑定视图函数和URL,咱们使用URLconf。服务器

URLconf就像是django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。你就是以这种方式告诉django,对于这个URL调用这段代码,对于那个URL调用那段代码。函数

以前执行django-admin.py startproject时,该脚本会自动为你建一份URLconf(即urls.py)。测试

打开urls.py文件,看到内容显示:网站

调用patterns()函数并将返回结果保存到urlpatterns变量。

django指望能从ROOT_URLCONF模块中找到urlpatterns变量。该变量定义了URL以及用于处理这些URL的代码之间的映射关系。若是想在URLconf中加入URL和view,只需增长映射URL模式和view功能的Python tuple便可。这里掩饰如何添加view中hello功能。

from fjango.conf.urls.defaults import *
from mysite.views import hello

urlpatterns = [
                       url(r'^hello/$', hello),
                       url(r'^time/$, date_time)
]

django在检查URL模式前,移除每个申请的URL开头的斜杠(/)。这意味着咱们为/hello/写URL模式不用包含斜杠(/)。

模式是正则表达式详细参见:http://www.cnblogs.com/Guido-admirers/p/6235484.html

若是有人申请访问/hello(尾部没有/)会怎样。用为咱们的URL模式要求尾部有一个斜杠(/),那个URL将不匹配。然而,默认地,任何不匹配或尾部没有斜杠(/)的申请URL,将被从新定向至尾部包含斜杠的相同字眼的URL。(这是受配置文件setting中的APPEND_SLASH项控制的)

若是你喜欢全部的URL都以'/'结尾的人(django开发者的偏心),那么你只须要在每一个URL后添加斜杠,而且设置”APPENDSLASH“为”True“。若是不喜欢URL以斜杠结尾或者根据每一个URL来决定,那么须要设置”APPENDSLASH“为”False“,而且根据本身的意愿来添加结尾斜杠在URL模式后。、

启动django开发服务器来测试修改好的URLconf,运行命令行python manage.py runserver,开发服务器会自动监测代码改动并自动重新载入。

了解一下django是怎么处理请求的:

当你经过在浏览器里敲http://127.0.0.1:8000/hello/来访问helloworld消息的时候,django的全部均开始与setting文件。当运行python manage.py runserver,脚本将在与manage.py同一个目录下查找名为setting.py的文件。这个文件包含了全部有关这个django项目的配置信息,均大写:TEMPLATEDIRS,DATABASENAME等。最重要的设置是ROOT_URLCONF,它将做为URLconf告诉django在这个站点中哪些python的模块将被用到。

django-admin.py startproject建立文件setting.py和urls.py,setting.py包含一个ROOT_URLCONF配置用来指向自动产生的urls.py。打开文件settings.py:能够看到 ROOT_URLCONF = 'mysite.urls'

相对应的文件是mysite/urls.py

当访问URL/hello/时,django根据ROOT+URLCONF的设置装载URLconf。而后按顺序逐个匹配URLconf里的URLpatterns,直到找到一个匹配。当找到这个匹配的URLpatterns就调用相关联的view函数,并把HttpRequest对象做为第一个参数。一个视图功能必须返回一个HttpResponse。一旦作完,django将完成剩余的转换python的对象到一个合适的带有HTTP头和body的webResponse,(例如,网页内容)。

总结一下:

  1. 进来的请求转入/hello/.
  2. Django经过在ROOT_URLCONF配置来决定根URLconf.
  3. Django在URLconf中的全部URL模式中,查找第一个匹配/hello/的条目。
  4. 若是找到匹配,将调用相应的视图函数
  5. 视图函数返回一个HttpResponse
  6. Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来

更多更详细内容见原文:http://www.code123.cc/1375.html

相关文章
相关标签/搜索