Django 之Handling HTTP requests

1、url调度

为了设计url,首先创建一个称为URLconf的Python模块。该模块是一个纯python代码,简单的映射url模式(简单正则表达式)和Python函数(views),这种映射可以很短,也可以引用其他的映射。因为是纯python代码,所以可动态的构建。
django如果处理一个请求的呢:
当一个用户请求一个页面时,下面就是系统要使用的算法来决定哪些python代码将要执行

  • Django决定root URLconf模块的使用,通常,这是setting中ROOT_URLCONF的值,但是,如果请求的HttpRequest类有一个urlconf属性,他的值将会被使用取代ROOT_URLCONF的值。
  • django加载该模块并查询urlpatterns变量,该值是一个python列表,其值是django.conf.urls.url()实例。
  • django顺序运行每个url模式,并在第一个匹配到请求url的地方停下来。
  • 一旦一个正则匹配到,django将导入并调用给定的view,该view获得以下参数:
    1.一个HttpRequest实例2,如果匹配到的正则返回无名的组那么匹配结果作为位置参数被提供3.通过正则表达式匹配到的命名的组将作为关键字参数传入。
  • 如果没有正则匹配到,或者在执行的过程中发生错误,django将会调用适当的错误处理view.举例:
from django.conf.urls import url
from . import views
urlpatterns = [
  url(r'^articles/2003/$', views.special_case_2003),
  url(r'^articles/([0-9]{4})/$', views.year_archive),
  url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
  url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]

要点:

  • 为了通过URL获取一个值,只要使用()包围它就行了。
  • 没必要在最前面加上/,因为每个url都有。
  • 每个正则前面的'r'字符都是建议的,当然了是可选的,告诉python该字符串是原生的。
    上面的例子中,使用的是简单的无命名的正则表达式组去获取url并作为位置参数传入到view中,更高级的使用是,使用命名的正则表达式组来抓取url,并作为关键字参数来传入到view中 。
    在python正则表达式中,命名的正则表达式组的语法为:(?Ppattern),其中name就是命名的正则表达式组的祖名,pattern就是匹配的表达式模式。举例:
from django.conf.urls import url
from . import views
urlpatterns = [
  url(r'^articles/2003/$', views.special_case_2003),
  url(r'^articles/(?P[0-9]{4})/$', views.year_archive),
  url(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/$', views.month_archive),
  url(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/(?P[0-9]{2})/$', views.article_detail),
]

你可能感兴趣的:(Django 之Handling HTTP requests)