zoukankan      html  css  js  c++  java
  • Django学习之URLconf

    Django处理request的步骤:

    1.确定根URLconf

    2.载入urls.py,找到变量urlpatterns,urlpatterns是django.conf.urls.url()的实例对象(列表)

    url(regex, view, kwargs=None, name=None)[source]
    regex是一个字符串或者 ugettext_lazy(),字符串包含正则表达式,兼容re模块,字符串通常使用原始字符串语法(r“),以便它们可以包含像 d这样的序列,而不需要使用另一个反斜杠来转义反斜杠。
    
    view参数是一个视图函数,或者基于类的视图的as_view()的结果,亦或者是一个include()。
    
    kwargs允许像视图函数或者方法传递额外的参数,参见 Passing extra options to view functions查看实例。
    
    name参数的意义查看 Naming URL patterns 
    
    Naming URL patterns
    为了执行URL反转,您需要使用命名URL模式,如上例所示。 用于URL名称的字符串可以包含您喜欢的任何字符。 
    
    当您命名URL模式时,请确保使用不太可能与任何其他应用程序选择的名称冲突的名称。 如果您调用了URL模式注释,而另一个应用程序也执行相同的操作,那么在使用此名称时,不能保证在您的模板中插入哪个URL。
    
    在您的网址名称上放置一个前缀,也许是从应用程序名称派生出来的,可以减少碰撞的几率。 我们建议像myapp-comment而不是comment。
    Passing extra options to view functions
    
    URLconfs有一个钩子,可以让您传递额外的参数到您的视图函数,作为Python字典。
    
    django.conf.urls.url()函数可以使用一个可选的第三个参数,它应该是一个额外的关键字参数的字典,以传递给view函数。
    
    例如:
    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),
    ]
    在联合框架中使用此技术将元数据和选项传递给视图。

    在这个例子中,对于/ blog / 2005 /的请求,Django将调用views.year archive(request,year ='2005',foo ='bar')。

    处理冲突

    可以使用一个URL模式来捕获命名关键字参数,并在其额外参数的字典中传递具有相同名称的参数。 当这种情况发生时,字典中的参数将被使用,而不是在URL中捕获的参数。

    3.Django按顺序执行每一个URL模式,当第一个request的URL匹配即停止向下执行

    4.一旦正则表达式匹配成功,Django导入并执行视图函数(或者基于类的视图函数),以下参数可传递到视图函数:

    HttpRequest实例对象

    如果匹配的正则表达式没有返回任何命名组,那么来自正则表达式的匹配将作为位置参数提供。

    关键字参数由正则表达式匹配的任何命名组组成,由在django.conf.urls.url()的可选kwargs参数中指定的任何参数覆盖。

    5.如果没有正则表达式匹配,或者在此过程中的任何一点出现异常,Django将调用适当的错误处理视图。 参见下面的错误处理。

    命名组

    上述示例使用简单的,未命名的正则表达式组(通过括号)捕获URL的位,并将它们作为位置参数传递给视图。 在更高级的使用中,可以使用命名的正则表达式组来捕获URL位,并将它们作为关键字参数传递给视图。

    在Python正则表达式中,命名的正则表达式组的语法是(?P <name> pattern),其中name是组的名称,而pattern是某些匹配的模式。

  • 相关阅读:
    《vi和vim》 学习手记(1)
    2013年1月第1个周末
    Oracle基础知识Oracle不同的启动关闭方式
    2013年1月第一个周末
    《vi和vim》 学习手记(2)
    Oracle基础知识数据迁移
    MySQL 显示表字段及注释等信息
    什么是UCenter Home、Discuz!、SupeSite、ECShop和SupeV 这些都是什么?
    mysql远程连接对用户的测试(吴龙波)
    MySQL与SQL的触发器的不同写法
  • 原文地址:https://www.cnblogs.com/leomei91/p/7269899.html
Copyright © 2011-2022 走看看