最近使用Django开发了大卫粘贴系统, 了解到了Django内嵌的强大的URL机制. 它的强大在于2个方便, 一个是灵活的url配置, 另外一个就是url的可逆机制.下面, 我们就来了解下Django的URL机制.
1. 灵活的配置
大家都知道, Django的url使用的正则匹配的方式, 这种方式有好也有坏, 好的地方是, 可以匹配出任何你想要的url, 不好的地方就是, 任何一个url都需要手工的去配置, 不能根据Model或者App进行自适配, 就像一般的MVC框架一样, 同一个controller下都有统一的url规则.
基本规则
一条简单的url配置如下:
(r'^register/$', 'pastesite.pastebin.views.register'),
当用户在浏览器输入http://localhost:8000/register/的时候, Django会把请求转到pastesite这个站点的pastebin这个app的views.py里的register方法, 怎么样, 非常的清晰明了吧.
参数传递
让我们再来看看稍微复杂点的url规则:
(r'^user/(?P<username>\w+)/$', 'pastesite.pastebin.views.user'),
在这个规则里, http://localhost:8000/user/kingheaven/会找到user这个方法, 并把kingheaven传给变量username, 这样, 在user这个方法里, 就可以使用username这个变量了, user方法的定义必须是这样的, def user(request, username).
实际上, 通过url往view里传参数, 还有另外一种方式, 看下面的url规则:
(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),
在这个url规则里, 地址http://localhost:8000/articles/2009/10/1912/会把2009, 10和1912按照顺序传递给article_detail方法, article_detail方法的定义如下, def article_detail(request, year, month, article_id), 这样就够了, 怎么样, 也很简单吧.
导入其它的url规则
Django允许你导入另外一个url文件, 来使你的app更加独立. 每个app都是用自己的urls配置文件, 然后在整站的urls配置一下, 使所有app的urls全部生效, 看下面的规则:
(r'^paste/', include('pastesite.pastebin.urls')),
这样, 所有paste/开头的请求, 都会转到pastesite/pastebin/urls.py去找到合适的url去匹配了.
2.逆转URL
这里借用了逆转裁判的名字, 哈哈. Django的url机制包括了一个url的方向机制, 只要我们定制了一条url的规则, 就可以根据这个规则, 根据view方法的名字, 反向推回一个url.
比如在model里, 我们定义一个get_absolute_url方法, 如下:
@permalink
def get_absolute_url(self):
return ('pastesite.pastebin.views.show', None,
{'paste_id': self.id})
使用@permalink这个修饰器以后, return里可以写上url中对应的view方法的名字, 这样, get_absolute_url将会去urls.py里查找该view对应的url规则, 并生成该url, 同时, 可以传递该url需要的参数过去. 听上去有一些复杂, 让我们看一下刚才那个方法对应的url规则:
urlpatterns = patterns('pastesite.pastebin.views',
(r'^(?P<paste_id>\d+)/$', 'show'),
)
不知道大家看明白了吗, 通过这条url, 可以找到这个view; 通过get_absolute_url, 可以生成对应这个url规则的url. 也就是说, 你只需要改一处url的设置, 就可以使我们的url变化, 而不需要去程序去满足这个改变, 非常的方便.
分享到:
相关推荐
全书分为12章和6个附录,内容包括,Django Python实战,Django速成:构建一个Blog,起始,定义和使用模型,URL、HTTP机制和视图,模板和表单处理,Photo Gallery,内容管理系统,Liveblog,Pastebin,高级Django...
第5章 URL、HTTP机制和视图 5.1 URL 5.2 HTTP建模:请求、响应和中间件 5.3 视图与逻辑 5.4 总结 第6章 模板和表单处理 6.1 模板 6.2 表单 6.3 总结 第三部分 Django应用实例 第7章 PhotoGallery 7.1 模型...
URL映射:Django使用URL映射机制将请求的URL地址与相应的处理函数进行匹配,从而实现灵活的URL路由和页面跳转。 模板引擎:Django的模板引擎提供了一种简单而强大的方式来生成动态的HTML页面。它支持模板继承、变量...
本书所讲的是Django:一个可以使Web开发工作愉快并且高效的Web开发框架。...第十五章: 缓存机制 第十六章 集成的子框架 第十七章: 中间件 第十八章: 集成已有的数据库和应用 第十九章: 国际化 第二十章: 安全
Django是一个开放源代码的Web应用框架,由Python写成。...URLconf机制是使用正则表达式匹配URL,然后调用合适的Python函数。框架把控制层给封装了,无非与数据交互这层都是数据库表的读,写,删除,更新的操作
16. 第十五章:缓存机制 17. 第十六章:集成的子框架 django.contrib 18. 第十七章:中间件 19. 第十八章:集成已有的数据库和应用 20. 第十九章:国际化 21. 第二十章:安全 22. 本站由VCC使用Django搭建。
第十五章: 缓存机制 完成度 100.00% 阅读 翻译 第十四章 集成的子框架 django.contrib 完成度 99.72% 阅读 翻译 第十七章: 中间件 完成度 95.08% 阅读 翻译 第十八章: 集成已有的数据库和应用 完成度 100.00% ...
URL映射:Django使用URL映射机制将请求的URL地址与相应的处理函数进行匹配,从而实现灵活的URL路由和页面跳转。 模板引擎:Django的模板引擎提供了一种简单而强大的方式来生成动态的HTML页面。它支持模板继承、变量...
URL映射:Django使用URL映射机制将请求的URL地址与相应的处理函数进行匹配,从而实现灵活的URL路由和页面跳转。 模板引擎:Django的模板引擎提供了一种简单而强大的方式来生成动态的HTML页面。它支持模板继承、变量...
第八章 高级视图和URL配置 第九章 通用视图 第十章 解读模板处理引擎 第十一章 输出非HTML的内容 第十二章 会话、用户和注册 第十三章 缓存机制 第十四章 集成的子框架 第十五章 中间件 完成度 第十六章 集成已有...
Django book 1.0, Django book 2.0 美化合并版, 版权归属 ...第十五章:缓存机制 第十六章:集成的子框架 django.contrib 第十七章:中间件 第十八章:集成已有的数据库和应用 第十九章:国际化 第二十章:安全
第八章 高级视图和URL配置 第九章 通用视图 第十章 解读模板处理引擎 第十一章 输出非HTML的内容 第十二章 会话、用户和注册 第十三章 缓存机制 第十四章 集成的子框架 第十五章 中间件 第十六章 集成已有...
第十五章: 缓存机制 完成度 100.00% 阅读 翻译 第十六章: 集成的子框架 django.contrib 完成度 99.72% 阅读 翻译 第十七章: 中间件 完成度 95.08% 阅读 翻译 第十八章: 集成已有的数据库和应用 完成度 100.00% ...
第十五章: 缓存机制 完成度 100.00% 第十四章 集成的子框架 django.contrib 完成度 99.72% 第十七章: 中间件 完成度 95.08% 第十八章: 集成已有的数据库和应用 完成度 100.00% 第十九章: 国际化 完成度 100....
Django 提供了一个强大的国际化和本地化的框架, 以帮助您在多语言和世界各地区进行应用程序的开发: 概览 | 国际化 | 本地化 | 给 Web 界面及表单输入进行本地化 时区 性能和优化 有各种各样的技术和工具,可以帮助...
同时,Django还提供了丰富的用户认证、URL路由、缓存机制等功能,帮助开发人员快速搭建稳定、安全、高效的应用。 MySQL数据存储:MySQL是一种成熟的关系型数据库管理系统,广泛应用于各个领域。通过使用MySQL作为...
同时,Django还提供了丰富的用户认证、URL路由、缓存机制等功能,帮助开发人员快速搭建稳定、安全、高效的应用。 MySQL数据存储:MySQL是一种成熟的关系型数据库管理系统,广泛应用于各个领域。通过使用MySQL作为...
同时,Django还提供了丰富的用户认证、URL路由、缓存机制等功能,帮助开发人员快速搭建稳定、安全、高效的应用。 MySQL数据存储:MySQL是一种成熟的关系型数据库管理系统,广泛应用于各个领域。通过使用MySQL作为...
同时,Django还提供了丰富的用户认证、URL路由、缓存机制等功能,帮助开发人员快速搭建稳定、安全、高效的应用。 MySQL数据存储:MySQL是一种成熟的关系型数据库管理系统,广泛应用于各个领域。通过使用MySQL作为...