DJANGO book学些笔记之:URLConf技巧

来源:互联网 发布:有网络app store连不上 编辑:程序博客网 时间:2024/06/06 10:44

1,多个视图函数的前缀相同时,考虑提取共同部分

2,按照视图前缀将url分组,每个组具有共同的view函数前缀,多组urlpartern可相加

3,根据settingDEGUG选项值,可以设置某个url是否被加入到URLConf中去(仅是个示例,可类推)

4,可以在url正则表达式中,将匹配到的路径参数命名,就可以为向view函数以参数形式传递(非命名形式)

5,一旦使用了命名的url匹配,非命名组将无效???

6,可在urlpatern构造时,可直接为view函数传递参数(eg:传递参数为模版名称,可根据url动态调用模版)

7,一个视图函数可以被多个路径匹配,这里没有限制

8,捕捉值和额外传递的给view的参数,如果相同,则捕捉值无效

9,可以将model参数传入到view函数中,以提供通用的视图

def object_list(request, model):
    obj_list = model.objects.all()
    template_name = 'mysite/%s_list.html' % model.__name__.lower()
    return render_to_response(template_name, {'object_list': obj_list})

10,可在urlpatern构造时,为view函数传递参数,进而将其传递到template中,作为模版的配置选项参数(使用实例技巧)

11,在view函数中,可设置某些参数的默认值,当此参数没有被传入时,使用默认值

12/start/{**}/end,当需要这种模式,但/start/spec/end/例外时,可将此写在urlparten的前面先匹配

13,即便你的url中匹配的是数字或其他类型,传递给view函数的都是文本

14,辨别请求的方法(get/post/…)是view函数该干的活,视图函数可解析request,得到请求的为get还是post;解耦技巧:

def method_splitter(request, GET=None, POST=None):
    if request.method == 'GET' and GET is not None:
        return GET(request)
    elif request.method == 'POST' and POST is not None:
        return POST(request)
    raise Http404
def some_page_get(request):
    assert request.method == 'GET'
    do_something_for_get()
    return render_to_response('page.html')
def some_page_post(request):
    assert request.method == 'POST'
    do_something_for_post()
    return HttpResponseRedirect('/someurl/')
# urls.py
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
    # ...
    (r'^somepage/$', views.method_splitter, {'GET': views.some_page_get, 'POST': views.some_page_post}),
    # ...
)

15,当视图函数都有一个共同的逻辑段时(如判断用户权限),考虑使用注解

16urlconf还可以分层实现,在上层中urlinclude下层urlpatern

17,上下多层的urlpartern的正则式组合起来匹配整个请求路径,因此要注意格式

18,上层urlparten传递传递过来的参数,将传递给下层urlparten的每一个view函数

这个技术只有在你确实需要那个被传递的额外参数的时候才显得有用。因为这个原因,这种技术仅当你确信在涉及到的接受到额外你给出的选项的每个URLconf时有用的才奏效