`
yzjklove
  • 浏览: 63762 次
  • 性别: 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变化, 而不需要去程序去满足这个改变, 非常的方便.
分享到:
评论

相关推荐

    Python库 | django-url-framework-0.3.3.tar.gz

    3. **表单处理**: Django内置了强大的表单处理机制,可以自动生成HTML表单,处理用户输入,并进行验证。这对于构建Web应用中的用户交互部分至关重要。 4. **URL路由**: 这就是我们关注的`django-url-framework`部分...

    django中url映射规则和服务端响应顺序的实现

    #### 一、理解Django的URL映射机制 在Django框架中,URL映射是非常重要的一个环节,它负责将用户的请求映射到相应的视图函数上。对于Django开发者而言,掌握URL映射规则能够帮助我们更高效地构建应用。 ##### 1.1 ...

    Django中URL的参数传递的实现

    Django是Python编程语言下的一...总之,Django的URL参数传递和反向解析机制极大地提高了Web应用开发的灵活性与效率。开发者可以利用这些特性来设计简洁明了的URL,处理不同类型的请求,并实现安全、维护性高的Web应用。

    django笔记 django笔记

    Django提供了一套强大的表单处理机制,可以自动生成HTML表单,验证用户输入,处理POST数据。表单可以基于模型,也可以自定义字段。 8. **中间件(Middleware)**: 中间件是Django中的一个特殊组件,它可以全局...

    django4.0官方中文文档

    Django 4.0的URL配置更加强大和灵活,支持命名URL、正则表达式匹配等特性。 6. **表单(Forms)**:Django提供了强大的表单处理机制,包括自动生成HTML表单、验证用户输入、处理POST数据等功能。这极大地简化了Web...

    Django Web开发指南.pdf

    Django的ORM系统提供了强大的数据库操作能力,它允许开发者使用Python编程语言直接操作数据库中的数据,而无需编写SQL语句: - 数据库的配置和管理。 - Python类与数据库表之间的映射。 - 数据库查询语言的抽象...

    Django_layui后台模板

    - 中间件:利用Django的中间件机制,实现全局的功能,如登录检查、日志记录等。 - RESTful API:如果项目需要前后端分离,可以利用Django的REST framework构建API接口,与前端进行通信。 7. 学习资源: - Django...

    Django框架 Django 2.1.7

    Django提供了强大的表单处理功能,可以方便地创建、验证用户输入,以及与模型进行交互。这包括自动生成HTML表单、处理POST数据以及验证。 4. **内置身份认证系统** Django 2.1.7包含了完整的用户认证系统,包括...

    最简单的Python Django入门教程.pdf

    **Django的工作机制** 用户通过浏览器发送请求,Django解析URL,找到对应的视图函数,视图处理请求并可能与模型交互获取数据,然后使用模板生成响应,最后返回给用户。整个过程中,Django自动处理了HTTP请求和响应的...

    精通Django.Django 1.8 LTS全解.pdf

    9. **缓存系统**:Django提供了多种缓存机制,包括内存缓存、数据库缓存等,以提高应用性能。 10. **测试与调试**:Django内建了全面的测试框架,支持单元测试、集成测试和功能测试。此外,它还有强大的错误报告和...

    Django课件.zip

    1. **表单和模型表单**:Django提供强大的表单处理机制,可以自动生成HTML表单,处理POST数据,进行验证,并返回错误信息。模型表单是基于模型类创建的表单,方便地将数据模型与表单绑定。 2. **认证和权限**:...

    Django-2.0.4 Django-2.0.4

    2. **URL路由系统**:Django的URL路由系统允许开发者通过定义简洁的URL模式来映射到特定的视图函数。在urls.py文件中,你可以定义URLconfs,实现动态和静态路由。 3. **模型(Model)**:模型是数据库的抽象层,...

    django-calendar-master_pythondjango_calendar_django_

    6. **表单(Form)**:Django 提供了一套强大的表单处理机制,方便创建和验证用户输入。在日历应用中,可能会有用于创建和编辑事件的表单。 7. **静态文件和媒体文件**:项目可能包含 CSS 和 JavaScript 文件来改善...

    获取Django项目的全部url方法详解

    在Django框架中,管理项目的...总之,理解Django的URL解析机制和利用递归处理URLResolver是实现这一功能的关键。通过这种方式,你可以有效地管理Django项目中的URL,提高开发效率,并确保对所有URL进行一致性的处理。

    Django-Blog:使用Django制作博客

    Django以其“快速、易用且强大”的特性深受开发者喜爱,它能够帮助我们高效地开发复杂的Web应用。 首先,我们需要了解Django的基本结构。Django遵循MVT(Model-View-Template)设计模式,这三者构成了Django应用的...

    精通Django.rar

    路由系统是Django中不可忽视的一部分,书中会教你如何设置URL模式,实现URL与视图的映射。表单处理也是Web开发中的常见任务,Django提供了强大的表单模块,让开发者能够轻松地创建、验证和渲染表单。数据库查询是...

    基于Django的教务信息管理系统源码

    Django,一个高性能、简洁优雅的Python Web框架,以其MVT(Model-View-Template)设计模式著称,为开发者提供了强大的数据库操作、表单处理和URL调度等工具。在构建教务信息管理系统时,Django的核心优势在于其高效...

    Django课件与代码

    Django还内置了强大的表单处理机制,可以自动生成HTML表单并处理用户提交的数据。你将探索如何定义模型表单,以及如何使用表单类来验证用户输入。 安全方面,Django提供了一些内置的安全特性,如CSRF保护、XSS防护...

    django试题发布和测验

    4. **URL配置(URLConf)**: Django通过URLconf将URL映射到相应的视图函数,实现URL路由。每个页面的URL都应在此配置中定义。 5. **表单(Forms)**: Django的表单处理功能简化了数据验证和用户输入处理。试题发布...

Global site tag (gtag.js) - Google Analytics