django接受url参数

在Django中有非常强大的URL模块,可以按照开发者的想法来制定清晰的URL,同时支持正则表达式。此外,在URL中还可以传递参数。

 

Django处理请求的方式

1) Django通过URLconf模块来进行判断。通常情况下,这就是ROOT_URLCONF配置的价值,但是如果请求携带了一个urlconf的属性(通常被中间件设置),那么这个被携带的urlconf将会替代ROOT_URLCONF的配置。

2) Django会调用Python模块并寻找各种urlpatterns。这是一个属于django.conf.urls.url()实例的python列表。

3) Django会遍历每个URL pattern,自上而下,并且选取收割匹配请求URL的pattern。

4) 一旦匹配某个url pattern的正则表达式,Django将导入并调用相关的view(这是一个简单的python函数,或者是一个class-based view)

这个view将会传递下列参数:

l  一个HttpRequest的实例

l  如果匹配了URL中一个no named group,那么参数将会按根据URL中的位置一一对应

l  如果匹配了URL中一个named group,且参数传递是通过named group来匹配的,那么参数将会被指定的kwargs代替。

5)  如果没有任何一个正则表达式被匹配,那么Django会抛出异常,并报错。


1 无参数情况

配置URL及其视图如下:

[python]  view plain  copy
  1. (r'^hello/$', hello)  
  2.    
  3. def hello(request):  
  4.     return HttpResponse("Hello World")  

访问http://127.0.0.1:8000/hello,输出结果为“Hello World”

2 传递一个参数
配置URL及其视图如下,URL中通过正则指定一个参数:

[python]  view plain  copy
  1. (r'^plist/(.+)/$', helloParam)  
  2.    
  3. def helloParam(request,param1):  
  4.     return HttpResponse("The param is : " + param1)  


访问http://127.0.0.1:8000/plist/china,输出结果为”The param is : china”

3 传递多个参数
参照第二种情况,以传递两个参数为例,配置URL及其视图如下,URL中通过正则指定两个参数:

[python]  view plain  copy
  1. (r'^plist/p1(\w+)p2(.+)/$', helloParams)  
  2.    
  3. def helloParams(request,param1,param2):  
  4.     return HttpResponse("p1 = " + param1 + "; p2 = " + param2)  

访问http://127.0.0.1:8000/plist/p1chinap22012/

输出为”p1 = china; p2 = 2012″

从这里可以看出,视图的参数是根据URL的正则式,按顺序匹配并自动赋值的。虽然这样可以实现任意多个参数的传递,但是却不够灵活,URL看起来很混乱,而且由于是正则匹配,有些情况下容易出错。

4 通过传统的”?”传递参数
例如,http://127.0.0.1:8000/plist/?p1=china&p2=2012,url中‘?’之后表示传递的参数,这里传递了p1和p2两个参数。

通过这样的方式传递参数,就不会出现因为正则匹配错误而导致的问题了。在Django中,此类参数的解析是通过request.GET.get方法获取的。

配置URL及其视图如下:

[python]  view plain  copy
  1. (r'^plist/$', helloParams1)  
  2.    
  3. def helloParams(request):  
  4.     p1 = request.GET.get('p1')  
  5.     p2 = request.GET.get('p2')  
  6.     return HttpResponse("p1 = " + p1 + "; p2 = " + p2)  

输出结果为”p1 = china; p2 = 2012″

你可能感兴趣的:(django接受url参数)