URLconf 就像是 Django 所支撑网站的目录。它的本质是 URL 模式以及要为该 URL 模式调
用的视图函数之间的映射表。你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,
对于那个 URL 调用那段代码。但必须记住的是视图函数必须位于 Python 搜索路径之中。
html
Python 搜索路径 就是使用 import 语句时, Python 所查找的系统目录清单。
举例来讲,假定你将 Python 路径设置为
['','/usr/lib/python2.4/site-packages','/home/username/djcode/'] 。若是执行代码
from foo import bar , Python 将会首先在当前目录查找 foo.py 模块( Python 路径第一
项的空字符串表示当前目录)。若是文件不存在, Python 将查找
/usr/lib/python2.4/site-packages/foo.py 文件。若是文件也不存在,它将尝试
/home/username/djcode/foo.py 。最后,若是 这个 文件还不存在,它将引起 ImportError
异常。
前端
若是对了解 Python 搜索路径值感兴趣,能够启动 Python 交互式解释程序,输入 import
sys ,接着输入 print sys.path 。
python
一般,你没必要关心 Python 搜索路径的设置。 Python 和 Django 会在后台自动帮你处理好。
(若是有兴趣了解的话, Python 搜索路径的设置工做是 manage.py 文件的职能之一。 )
程序员
执行 django-admin.py startproject 时,该脚本会自动为你建了一份 URLconf(即
urls.py 文件)。让咱们编辑一下这份文件。缺省状况下它是下面这个样子:
正则表达式
from django.conf.urls import url from django.contrib import admin import view urlpatterns = [ url(r'^hello', view.djangoStudy), url(r'^admin/', admin.site.urls), url(r'^index/$',view.index) ] # urlpatterns = [ # url(r'^admin/', admin.site.urls), # ]
当前应该注意是 urlpatterns 变量, Django 指望能从 ROOT_URLCONF 模块中找到它。该变
量定义了 URL 以及用于处理这些 URL 的代码之间的映射关系数据库
r'^index/$' 中的 r 表示'^index/$' 是一个原始字符串。这样一来就能够避免 正则表达式
有过多的转义字符。django
没必要在 '^index/$'前加斜杠(/)来匹配 /index/ , 由于 Django 会自动在每一个表 达式前
添加一个斜杠。乍看起来,这好像有点奇怪,可是 URLconfs 可能由其它的 URLconfs 所引
用, 因此不加前面的斜杠可以让事情简单一些。 数组
上箭头 ^ 和美圆符号 $ 符号很是重要。上箭头要求表达式对字符串的头部进行匹配,美圆
符号则要求表达式对字符串的尾部进行匹配。浏览器
最好仍是用范例来讲明一下这个概念。若是咱们用 '^index/' (结尾没有$), 那么以 index/
开始的 任意 URL 都会匹配,好比 /index/foo 和 /index/bar , 不只仅是 /index/ 。一样的,
若是咱们去掉最前面的 ^ ( 'index/$' ), Django 同样会匹配由 index/ 结束的 任意 URL
/index/ ,好比 /foo/bar/index/ 。 所以,咱们必须同时用上 ^ 和 $ 来精确匹配 URL
/index/ 。不能多也不能少。服务器
正则表达式 (或 regexes ) 是通用的文本模式匹配的方法。 Django URLconfs 容许你 使用
任意的正则表达式来作强有力的 URL 映射,不过一般你实际上可能只须要使用不多的一 部分
功能。下面就是一些经常使用通用模式:
咱们必须对刚才所发生的几件事情进行一些说明。它们是运行 Django 开发服务器和构造 Web
页面请求的本质所在。
命令 python manage.py runserver 从同一目录载入文件 settings.py 。 该文件包含了这
个特定的 Django 实例全部的各类可选配置,其中一个最重要的配置就是 ROOT_URLCONF 。
ROOT_URLCONF 告诉 Django 哪一个 Python 模块应该用做本网站的 URLconf。
还记得 django-admin.py startproject 建立的文件 settings.py 和 urls.py 吗? 这时
系统自动生成的 settings.py 里 ROOT_URLCONF 默认设置是 urls.py 。
当访问 URL /time/ 时, Django 根据 ROOT_URLCONF 的设置装载 URLconf 。 而后按顺序逐
个匹配 URLconf 里的 URLpatterns,直到找到一个匹配的。当找到这个匹配 的 URLpatterns
就调用相关联的 view 函数,并把 HttpRequest 对象做为第一个参数。 (稍后再给出
HttpRequest 的更多信息)
该 view 函数负责返回一个 HttpResponse 对象。
你如今知道了怎么作一个 Django-powered 页面了,真的很简单,只须要写视图函数并用
URLconfs 把它们和 URLs 对应起来。你可能会认为用一系列正则表达式将 URLs 映射到函数也
许会比较慢,但事实却会让你惊讶。
接下来请求的处理就到了.../sign/views.py 中的 index 视图函数
#-*-coding:utf-8-*- # Time:2017/11/13 17:08 # Author:YangYangJun from django.http import HttpResponse from django.shortcuts import render def djangoStudy(request): return HttpResponse('Hello DjangoStudy !') def index(request): return render(request,'index.html')
视图在我看来, 它在 Django 中很是重要, 是链接页面与数据的中间纽带。 拿登陆的例子来说, 用户在页
面上输入了用户名和密码点击登陆。 那么 request 请求会由视图来接收, 如何提取出用户名和密码的数据, 如
何用这些数据去查询数据库, 再如何将登陆成功的页面返回给用户, 这些所有由视图层来完成。
Django 如何处理请求: 完整细节
除了刚才所说到的简明 URL-to-view 映射方式以外, Django 在请求处理方面提供了大量的灵
活性
经过 URLconf 解析到哪一个视图函数来返回 HttpResponse 能够经过中间件(middleware) 来
短路或者加强。关于中间件的细节将在第十五章详细谈论,这里给出 下图 让你先了解 大
体概念.。
当服务器收到一个 HTTP 请求之后,一个服务器特定的 handler 会建立 HttpRequest 并传递
给下一个组件并处理。
这个 handler 而后调用全部可用的 Request 或者 View 中间件。这些类型的中间件一般是用
来 加强 HttpRequest 对象来对一些特别类型的 request 作些特别处理。只要其中有一个 返
回 HttpResponse ,系统就跳过对视图的处理。
即使是最棒的程序员也会有出错的时候, 这个时候 异常处理中间件(exception middleware) 能够帮你的
大忙。若是一个视图函数抛出异常,控制器会传递给异常处理中间件处理。若是这个 中间件没有返回
HttpResponse ,意味着它不能处理这个异常,这个异常将会再次抛出。
即使是这样,你也不用担忧。 Django 包含缺省的视图来生成友好的 404 和 500 回应
(response)。
最后, response middleware 作发送 HttpResponse 给浏览器以前的后处理或者清除 请求
用到的相关资源。
新建一个html页面,命名为:index.html, urls和view配置如上图
templates 模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Django Page</title> </head> <body> <h1>Hello Django</h1> </body> </html>
模板的载体就是咱们所熟悉的 Web 页面了, Django 自带的有模板语言。 它的主要做用是如何展现数据,
好比视图层返回的是一个字符串, 要如何显示在页面上; 返回的对象数组要如何显示等。 固然, 为了使页面
更漂亮须要借助前端技术, 好比 CSS、 JavaScript 等。
运行后,结果如图