`
yzjklove
  • 浏览: 63055 次
  • 性别: Icon_minigender_1
  • 来自: 广东省惠州市
社区版块
存档分类
最新评论

Django强大的URL机制

阅读更多
最近使用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变化, 而不需要去程序去满足这个改变, 非常的方便.
分享到:
评论

相关推荐

    Django Web开发指南

    全书分为12章和6个附录,内容包括,Django Python实战,Django速成:构建一个Blog,起始,定义和使用模型,URL、HTTP机制和视图,模板和表单处理,Photo Gallery,内容管理系统,Liveblog,Pastebin,高级Django...

    DjangoWeb开发指南

    第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 模型...

    06.如何使用Django模板.mp4

    URL映射:Django使用URL映射机制将请求的URL地址与相应的处理函数进行匹配,从而实现灵活的URL路由和页面跳转。 模板引擎:Django的模板引擎提供了一种简单而强大的方式来生成动态的HTML页面。它支持模板继承、变量...

    Django Web框架入门到精通 中文版

    本书所讲的是Django:一个可以使Web开发工作愉快并且高效的Web开发框架。...第十五章: 缓存机制 第十六章 集成的子框架 第十七章: 中间件 第十八章: 集成已有的数据库和应用 第十九章: 国际化 第二十章: 安全

    基于django搭建的博客

    Django是一个开放源代码的Web应用框架,由Python写成。...URLconf机制是使用正则表达式匹配URL,然后调用合适的Python函数。框架把控制层给封装了,无非与数据交互这层都是数据库表的读,写,删除,更新的操作

    Djangobook2中文版.

    16. 第十五章:缓存机制 17. 第十六章:集成的子框架 django.contrib 18. 第十七章:中间件 19. 第十八章:集成已有的数据库和应用 20. 第十九章:国际化 21. 第二十章:安全 22. 本站由VCC使用Django搭建。

    中文版django book

    第十五章: 缓存机制 完成度 100.00% 阅读 翻译 第十四章 集成的子框架 django.contrib 完成度 99.72% 阅读 翻译 第十七章: 中间件 完成度 95.08% 阅读 翻译 第十八章: 集成已有的数据库和应用 完成度 100.00% ...

    07.在Django中使用数据库(1).mp4

    URL映射:Django使用URL映射机制将请求的URL地址与相应的处理函数进行匹配,从而实现灵活的URL路由和页面跳转。 模板引擎:Django的模板引擎提供了一种简单而强大的方式来生成动态的HTML页面。它支持模板继承、变量...

    08.在Django中使用数据库 (2).mp4

    URL映射:Django使用URL映射机制将请求的URL地址与相应的处理函数进行匹配,从而实现灵活的URL路由和页面跳转。 模板引擎:Django的模板引擎提供了一种简单而强大的方式来生成动态的HTML页面。它支持模板继承、变量...

    django从入门到深入WEB教程

    第八章 高级视图和URL配置 第九章 通用视图 第十章 解读模板处理引擎 第十一章 输出非HTML的内容 第十二章 会话、用户和注册 第十三章 缓存机制 第十四章 集成的子框架 第十五章 中间件 完成度 第十六章 集成已有...

    djangoBook 中文 v1.0 v2.0 合并美化版 原创

    Django book 1.0, Django book 2.0 美化合并版, 版权归属 ...第十五章:缓存机制 第十六章:集成的子框架 django.contrib 第十七章:中间件 第十八章:集成已有的数据库和应用 第十九章:国际化 第二十章:安全

    The Django Book(第一版 中文高清版)

    第八章 高级视图和URL配置 第九章 通用视图 第十章 解读模板处理引擎 第十一章 输出非HTML的内容 第十二章 会话、用户和注册 第十三章 缓存机制 第十四章 集成的子框架 第十五章 中间件 第十六章 集成已有...

    The Django Book 2.0中文译本.pdf

    第十五章: 缓存机制 完成度 100.00% 阅读 翻译 第十六章: 集成的子框架 django.contrib 完成度 99.72% 阅读 翻译 第十七章: 中间件 完成度 95.08% 阅读 翻译 第十八章: 集成已有的数据库和应用 完成度 100.00% ...

    The Django Book 2.0中文修正版

    第十五章: 缓存机制 完成度 100.00% 第十四章 集成的子框架 django.contrib 完成度 99.72% 第十七章: 中间件 完成度 95.08% 第十八章: 集成已有的数据库和应用 完成度 100.00% 第十九章: 国际化 完成度 100....

    django-docs-2.2-zh-hans.zip

    Django 提供了一个强大的国际化和本地化的框架, 以帮助您在多语言和世界各地区进行应用程序的开发: 概览 | 国际化 | 本地化 | 给 Web 界面及表单输入进行本地化 时区 性能和优化 有各种各样的技术和工具,可以帮助...

    基于django药物管理系统.zip

    同时,Django还提供了丰富的用户认证、URL路由、缓存机制等功能,帮助开发人员快速搭建稳定、安全、高效的应用。 MySQL数据存储:MySQL是一种成熟的关系型数据库管理系统,广泛应用于各个领域。通过使用MySQL作为...

    基于django摄影交流平台.zip

    同时,Django还提供了丰富的用户认证、URL路由、缓存机制等功能,帮助开发人员快速搭建稳定、安全、高效的应用。 MySQL数据存储:MySQL是一种成熟的关系型数据库管理系统,广泛应用于各个领域。通过使用MySQL作为...

    基于django食堂外卖系统.zip

    同时,Django还提供了丰富的用户认证、URL路由、缓存机制等功能,帮助开发人员快速搭建稳定、安全、高效的应用。 MySQL数据存储:MySQL是一种成熟的关系型数据库管理系统,广泛应用于各个领域。通过使用MySQL作为...

    基于Django的手办交易平台.zip

    同时,Django还提供了丰富的用户认证、URL路由、缓存机制等功能,帮助开发人员快速搭建稳定、安全、高效的应用。 MySQL数据存储:MySQL是一种成熟的关系型数据库管理系统,广泛应用于各个领域。通过使用MySQL作为...

Global site tag (gtag.js) - Google Analytics