码迷,mamicode.com
首页 > Web开发 > 详细

Django的URL分发器文档翻译

时间:2017-04-03 17:28:30      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:django   python   分发器   

URL 分配器(URL dispatcher)

一个干净、优雅的URL 方案是是设计高质量的Web应用程序中非常重要的一个细节,Django [‘dɡo](发音类似于’粘 狗’、 这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的,没有其他意思)让你用你想要的任何方式设计URL,并且没有框架结构限制。没有必要用.php或者.cgi,也一定没有(0,2097,1-1-1928,00)这种荒谬的东西。

请参考来自于www的创始人Tim Berners-Lee的一篇文章:Cool URIsdon’t change,在这篇文章里,关于为什么URLs应该是干净和可用的。他给出了一个卓越的理由。

概览

为了给一个应用设计URLs,你随便的创建了一个叫做URLconfPython模块,也就是URL的配置,这个模块是用纯粹的Python代码写的,并且在URL模式(简单的正则表达式)和Python方法(你的views)之间做了一个简单的映射。

这个映射在需要的地方可长可短,它可以引用其他的映射,因为它是纯Python代码,它可以被动态构建。

Django提供了一种途按照活动的语言(此处还没搞懂,这个应该和python的国际化有关)翻译URLs的途径,详情请见:internationalizationdocumentation

Django是如何处理一个请求的

当用户从你的Django网站请求一个页面的时候,

系统根据下面的运算规则去决定应该执行哪一段Python代码:

  1. Django判断根目录下的URLconf模块并使用,通常来说,设置ROOT_URLCONF的值,但是如果带有urlconf属性(由中间件设置)的HttpRequest的对象进来,那么它的值被替换成ROOT_URLCONF的设置。

  2. Django加载Python模块并查找urlpatterns变量。这应该是一个django.conf.urls.url()实例的Python列表。

  3. Django按顺序运行每个URL模式,并且当匹配到一个URL请求的时候就停止。

  4. 一旦正则表达式被匹配,Django导入并调用给定的view,这个view是一段简单的Python方法的代码,或者是一个基于类的view,这个view传递以下参数:

  5. l  一个HttpRequest实例

  6. l  如果匹配的正则表达式返回一个没有命名的组,那么来自正则表达式的这个匹配将被提供一个位置参数。

  7. l  参数的关键字又任何被正则表达式匹配的命名空间组成,通过重写被kwargs的可选参数指定的任何参数给django.conf.urls.url().传值。

  8. 如果没有正则表达式匹配,或者在任何程序处抛出了异常,Django回调一个合适的错误处理视图,详细请看下面的“异常处理”

 

举例

请看下面的URLconf样本

fromdjango.conf.urlsimport url
from.import views
urlpatterns = [
    url(r‘^articles/2003/$‘, views.special_case_2003),
    url(r‘^articles/([0-9]{4})/$‘, views.year_archive),
    url(r‘^articles/([0-9]{4})/([0-9]{2})/$‘, views.month_archive),
    url(r‘^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$‘, views.article_detail),
]

注意:

  • 从URL中捕获值的时候,请用圆括号扩起来

  • 这里没有必须要求添加一个前导斜线,因为每个URL都有,比如^articles不应该写成^/articles

  • 这个在正则表达式字符串前面的’r’是可选的,但是建议使用上。它告诉Python这个字符串是原生的,在这个字符串中什么都不需要转义。详情请见Dive Into Python’s explanation.


本文出自 “图灵庄园” 博客,请务必保留此出处http://thinkcoding.blog.51cto.com/4410442/1912642

Django的URL分发器文档翻译

标签:django   python   分发器   

原文地址:http://thinkcoding.blog.51cto.com/4410442/1912642

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!