• Django是如何处理URLconf的?

    urls.py的工作原理
    服务器君一共花费 17.888 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    urls.py 的规则

    URL配置(URLconf)就像是 Django 所支撑网站的目录。它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码。 例如,当用户访问/foo/时,调用视图函数foo_view(),这个视图函数存在于Python模块文件view.py中。

    • 执行 django-admin.py startproject 时,该脚本会自动为你建了一份 URLconf(即 urls.py 文件)。在同时自动创建的settings.py文件中,创建一个变量ROOT_URLCONF,其变量的值就是根URLconf的模块名。默认值是urls.py文件的模块名。

    例如:我的 Django 项目的根目录名为“pearl”,ROOT_URLCONF的默认值为“pearl.urls”。我们知道,urls.py 是用来配置 URL 的,那么它是如何工作的呢?

    我们先来看看这个规则的原型:

    from django.conf.urls.defaults import *
    urlpatterns = patterns('',
        (r'^login/$', openid_login, {}, 'openid-login'),
    )
    

    即:

    from django.conf.urls.defaults import *
    urlpatterns = patterns(前缀,
        (表达式, 视图函数, 视图函数, 名称),
    )
    

    “前缀”会在视图函数里面会自动加上指引。view = prefix + '.' + view,最后调用RegexURLPattern(regex, view, kwargs, name)。

    那么 RegexURLPattern() 又是长什么样子呢?先看看,暂不作深入讨论。

    class RegexURLPattern(object):
        def __init__(self, regex, callback, default_args=None, name=None):
            self.regex = re.compile(regex, re.UNICODE)
            if callable(callback):
                self._callback = callback
    

    URL的规则,Django会如何处理?

    要弄清Django如何处理URL配置规则,先要了解几个概念。

    • URL模式:URL模式是指在Django urls模块中,名为urlpatterns的元组中包含的每一个值。通常由patterns方法生成urlpatterns元组的内容。
    • URL分解器:通常,一个URL分解器对应一个URL配置模块,它可以包含多个URL模式,也可以包含多个其他URL分解器。通过这种包含结构设计,实现Django对URL的层级解析。URL分解器是Django实现app与项目解耦的关键。通常由include方法操作的URL配置模块,最终会被解释成为URL分解器。
    • 匹配结果:匹配结果是指当URL被正确匹配时,需返回的匹配结果。

    由于每个处理方式都需要一定篇幅介绍,故这里只作概念介绍,具体的介绍放在后面的小节里。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [移动开发] Android与SQLite数据库 7 个条目
  2. [计算机算法] 从双端队列引出的卡特兰数 3 个条目
  3. [PHP程序设计] PHP与函数式编程 1 个条目
  4. [移动开发] Android 开发调试工具 ADB 3 个条目
  5. [移动开发] Android View注入框架Butter Knife 3 个条目
  6. [软件工程与项目管理] 浏览器的HTML解析器 8 个条目
  7. [Python程序设计] Django模板系统 11 个条目
  8. [运维管理] 防火墙原理与应用 5 个条目
  9. [Linux操作系统] 基本 Linux Shell 命令 2 个条目
  10. [PHP程序设计] fsockopen,curl与file_get_contents 12 个条目
  11. [软件工程与项目管理] 浏览器与CSS渲染技巧 2 个条目
  12. [数据库技术] 数据库范式篇 5 个条目
窗口 -- [资讯]