• URLconf处理其一:URL模式

    URL模式的处理类
    服务器君一共花费 10.337 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    前面提到了下,URL模式是指在Django urls模块中,名为urlpatterns的元组中包含的每一个值。通常由patterns方法生成urlpatterns元组的内容。

    每个URL模式都需要指定如下几个内容:

    • 一个正则表达式字符串。
    • 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串。
    • 可选的要传递给视图函数的默认参数(字典形式)。
    • 一个可选的name参数。
    • 路径前缀,加在视图函数路径字符串的前面组成完整的视图函数路径。可以通过patterns方法的第一个参数指定。

    大概如下:

    urlpatterns = patterns(前缀,
        (正则表达式, 视图函数, 参数字典, 名称),
    )
    

    类django.core.urlresolvers.RegexURLPattern用来表示Django URL模式:

    class RegexURLPattern(object):
        def __init__(self, regex, callback, default_args=None, name=None):
            # regex is a string representing a regular expression.
            # callback is either a string like 'foo.views.news.stories.story_detail'
            # which represents the path to a module and a view function name, or a
            # callable object (view).
            self.regex = re.compile(regex, re.UNICODE)
            if callable(callback):
                self._callback = callback
            else:
                self._callback = None
                self._callback_str = callback
            self.default_args = default_args or {}
            self.name = name
     
        def __repr__(self):
            return '<%s %s %s>' % (self.__class__.__name__, self.name, self.regex.pattern)
     
        def add_prefix(self, prefix):
            """
            Adds the prefix string to a string-based callback.
            """
            if not prefix or not hasattr(self, '_callback_str'):
                return
            self._callback_str = prefix + '.' + self._callback_str
     
        def resolve(self, path):
            match = self.regex.search(path)
            if match:
                # If there are any named groups, use those as kwargs, ignoring
                # non-named groups. Otherwise, pass all non-named arguments as
                # positional arguments.
                kwargs = match.groupdict()
                if kwargs:
                    args = ()
                else:
                    args = match.groups()
                # In both cases, pass any extra_kwargs as **kwargs.
                kwargs.update(self.default_args)
     
                return ResolverMatch(self.callback, args, kwargs, self.name)
     
        def _get_callback(self):
            if self._callback is not None:
                return self._callback
            try:
                self._callback = get_callable(self._callback_str)
            except ImportError, e:
                mod_name, _ = get_mod_func(self._callback_str)
                raise ViewDoesNotExist("Could not import %s. Error was: %s" % (mod_name, str(e)))
            except AttributeError, e:
                mod_name, func_name = get_mod_func(self._callback_str)
                raise ViewDoesNotExist("Tried %s in module %s. Error was: %s" % (func_name, mod_name, str(e)))
            return self._callback
        callback = property(_get_callback)
    
更多 推荐条目

Welcome to NowaMagic Academy!

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

本章最新发布
随机专题
  1. [PHP程序设计] 命令式编程范式 6 个条目
  2. [Python程序设计] Python Web部署的背景知识 9 个条目
  3. [PHP程序设计] fsockopen,curl与file_get_contents 12 个条目
  4. [移动开发] Activity 初步知识 2 个条目
  5. [数据库技术] MySQL中英文混合排序 4 个条目
  6. [Python程序设计] Django Web环境配置 2 个条目
  7. [移动开发] 从代码角度去认识HttpClient 2 个条目
  8. [数据库技术] SQL基础语法 1 个条目
  9. [计算机算法] TAOCP与算法 12 个条目
  10. [移动开发] Android里的ContentValues 2 个条目
  11. [移动开发] Android属性系统Property 9 个条目
  12. [PHP程序设计] htaccess 设置技巧 6 个条目
窗口 -- [资讯]