Django URL路由概述正则表达式
一个干净优雅的URL方案是高质量Web应用程序中的一个重要细则
Django能够让你设计URL,不管你想要什么,没有框剪限制
要为应用程序设计URL,您能够非正式地建立一个名为URLconf(URL configura URL配置)的Python模块。
这个模块是纯Python代码,是一个简单的Python模式(简单的正则表达式)到Python函数(您的视图)之间的映射。算法
Djangon如何处理一个请求django
当用户从Django服务器站点请求页面时,系统遵循如下算法来肯定要执行的Python代码:服务器
1. 首先Django肯定要使用的根URLconf模块。经过 ROOT_URLCONF 来设置,具体在 settings.py 配置文件中。函数
可是若是传入HttpRequest对象具备urlconf属性(由中间件设置),则其值将替换ROOT_URLCONF设置。测试
2. Django加载该Python模块并查找该变量urlpatterns。这应该是一个Python的django.conf.urls.url()实例列表。url
3. Django按顺序运行每一个URL模式,并在匹配所请求的URL的第一个URL中中止。spa
4. 一旦正则表达式匹配,Django将导入并调用给定的视图,这是一个简单的PYthon函数(或基于类的视图)。该视图经过如下参数传递:设计
5. 若是没有正则表达式匹配,或在此过程当中的任何一点出现异常,Django将调用适当的错误处理视图。code
示例
如下是一个URLconf示例:
1 from django.conf.urls import url 2 3 from . import views 4 5 urlpatterns = [ 6 url(r'^articles/2003/$', views.special_case_2003), 7 url(r'^articles/([0-9]{4})/$', views.year_archive), 8 url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), 9 url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), 10 ]
说明:
1. 要从URL捕获一个值,只须要将其括起来
2.没有必要添加一个主要的斜杠,由于每一个URL都含有。例如^articles , 不是 ^/articles。
3.正则表达式前面的 'r' 是可选的,可是推荐使用。它告诉Python 这个字符串是一个'raw'(元字符串,字符串中没有任何内容被转义)
请求示例:
/articles/2005/03/ 将匹配列表中的第三个条目。Django会调用views.month_archive(request, '2005', '03')函数
/articles/2005/3/ 不会匹配其中的任何 URL模式 。由于第三个条目中 views.month_archive 月份须要两位数字。
/articles/2003/ 将匹配列表中的第一个个模式,而不是第二个。由于模式是按顺序测试的,第一个模式是 第一个经过测试 的 。像这样能够很随意地插入一些特殊的模式。在这里,Django会调用 views.special_case_2003(request)
/articles/2003 将不匹配这些模式中的任何一个,由于每一个模式都要求URL以斜杠结尾。
/articles/2003/03/03/ 将会匹配最后一个模式,Django会调用 views.article_detail(request, '2003', '03', '03') 函数
注意:每一个捕获的参数都做为纯Python字符串发送到视图,不管正则表达式匹配的是什么,即便[0-9]{4} 只会匹配整数字符串。