Django URL调度
来源:互联网 发布:mac chmod 777 编辑:程序博客网 时间:2024/05/22 14:27
当用户请求一个页面时,通过以下运算法则决定执行哪一段 Python代码:
Django首先检查 settings file 中的 ROOT_URLCONF 设置. 这是一个表示 Python 导入 URLconf 需要的绝对路径字符串. 例如: “mydjangoapps.urls”.
Django 载入这个 Python 模块并寻找变量 urlpatterns. 该变量是一个 django.conf.urls.defaults.patterns() 函数返回值格式的元素组成的列表.
Django 顺序处理每个 URL 模式, 直到找到一个与请求URL的相匹配的模式为止.
一旦匹配成功, Django 导入并调用对应的 view, 也就是相应的 Python 函数. 这个 view 函数会得到一个 request object 作为它的第一个参数, 在正则表达式匹配中得到的其它值也传递给 view 作为其它的参数.
1.命名分组
在 Python 正则表达式里, 命名分组的语法是 (?Ppattern), 这里 name 是分组的名字而 pattern 是要匹配的模式.
下面用命名分组重写上面的例子:
urlpatterns = patterns('',(r'^articles/2003/$','news.views.special_case_2003'), (r'^articles/(?P<year>d{4})/$', 'news.views.year_archive'), (r'^articles/(?P<year>d{4})/(?P<month>d{2})/$', 'news.views.month_archive'), (r'^articles/(?P<year>d{4})/(?P<month>d{2})/(?P<day>d+)/$', 'news.views.article_detail'), )
上面的代码与前面的代码功能完全相同, 不过传递给 view 函数的不再是位置相关参数,而变成了关键字参数.比如:
页面请求 /articles/2005/03/ 会自动调用函数 news.views.month_archive(request, year='2005', month='03'),
而不是 news.views.month_archive(request, '2005', '03').
页面请求 /articles/2003/03/3/ 会自动调用函数 news.views.article_detail(request, year='2003', month='03', day='3').
实际上, 这意味着 URLconfs 更清晰,而且避免了参数顺序错误引发的 bug – 定义 view 函数时不必特别在意参数的顺序.
2.URLconf 搜索依据
URLconf 根据请求 URL (作为标准 Python 字符串处理) 进行搜索. 不包括任何 GET 或 POST 参数,也不包括域名.
比如,页面请求 http://www.example.com/myapp/, URLconf 将查找 /myapp/.
对页面请求 http://www.example.com/myapp/?page=3, URLconf 将查找 /myapp/.
URLconf 不考虑请求的方法. 也就是说,同一 URL 不论使用何种请求方法 – POST, GET, HEAD, 等等. – 都会导向同一个 view 函数.
3.view 前缀
你可在 patterns() 调用时指定一个通用的 view 前缀, 以减少代码重复.
下面是来自 Django overview 的一个 URLconf 示例:
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^articles/(d{4})/$', 'myproject.news.views.year_archive'), (r'^articles/(d{4})/(d{2})/$', 'myproject.news.views.month_archive'),(r'^articles/(d{4})/(d{2})/(d+)/$', 'myproject.news.views.article_detail'), )
在这个例子里,每个 view 都有同样的前缀 – ‘myproject.news.views’.你可以利用 patterns() 函数的第一个参数来指定一个 view 前缀, 该前缀将应用在每一个 view 函数上.
下面重写上面的例子,两者对比一下,后者简明的多:
from django.conf.urls.defaults import * urlpatterns = patterns('myproject.news.views',(r'^articles/(d{4})/$', 'year_archive'),(r'^articles/(d{4})/(d{2})/$', 'month_archive'),(r'^articles/(d{4})/(d{2})/(d+)/$', 'article_detail'), )
4.包括其它的 URLconfs
在任意位置, urlpatterns 可以 “include” 其它的 URLconf 模块. This essentially “roots” a set of URLs below other ones.
举例来说, 下面是 Django website 的 URLconf. 它包括了一系列其它 URLconfs:
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^weblog/', include('django_website.apps.blog.urls.blog')), (r'^documentation/', include('django_website.apps.docs.urls.docs')), (r'^comments/', include('django.contrib.comments.urls.comments')), )
注意上例中的正则表达式以一个反斜线而不是 $ 字符(表示字符串结束)结尾.只要 Django 遇到 include(), 它就在该点砍掉任何匹配的 URL 部分,并将剩余的部分发送到 URLconf 以进行下一步处理。
5.传递额外参数给 view 函数
URLconfs 允许以 Python 字典的形式传递额外的参数给 view 函数.
任何 URLconf tuple 都可以有可选的第三个元素, 一个传递给 view 函数的额外的字典参数.
示例:
urlpatterns = patterns('blog.views', (r'^/blog/(?P<year>d{4})/$', 'year_archive', {'foo': 'bar'}), )
在这个例子里, 页面请求 /blog/2005/, Django 会自动调用 blog.views.year_archive() 函数, 并传递给它以下关键字参数:
year='2005', foo='bar'
- django url调度
- Django URL调度
- Django URL调度详述
- django-url调度器-中级篇
- Django URL
- Django url
- Django---URL
- django 1.8 官方文档翻译: 3-1-1 URL调度器
- django 中文 url 问题
- DJANGO获取当前URL
- django中url配置
- Django的url解析
- Django URL 解析
- django URL映射过程
- Django的url用法
- django--URL配置
- django url正则
- django过滤器-----url
- CCS 6.0 下载
- @html.ActionLink的几种参数格式
- 第一节:创建自己的每一个场景
- Algorithms—36.Valid Sudoku
- 继承ViewGroup实现Scroll滑动效果
- Django URL调度
- 6.2.3.2 BLOB 和 TEXT 类型
- Shell读取用户输入【以及循环读取验证和while循环中添加多个条件[ .. ] &&或者|| [ .. ]】
- boost log 中打印源码的名字与行号的两种方法
- LeetCode: Happy Number
- 学习 Activiti5.13与springMVC整合,自学001期
- leetcode 日经贴,Cpp code -Contains Duplicate III
- Hibernate HelloWorld-12 HQL连接
- Unsupported major.minor version 51.0(jdk版本错误)