跳转到主要内容

django.conf.urls.defaults的替代品,支持HTTP动词分派和视图包装。

项目描述

django-reroute是一组简化视图的工具,特别是在实现REST API时。django-reroute为django.conf.urls.defaults提供了一种替代品,支持HTTP动词分派,这样您的视图就不会因为if request.method == 'GET'语句而变得杂乱。它还提供了一套便捷的视图装饰器,用于简化常见的任务,例如使用RequestContext渲染模板和在请求处理后将重定向到特定的视图。

新闻

自v1.1.1版起,现在支持Django 1.3

下载

Github: http://github.com/dnerdy/django-reroute

easy_install

easy_install django-reroute

源代码

# Download the source and run
python setup.py install

将django-reroute添加到您的项目

django-reroute是django.conf.urls.defaults的替代品

# Replace
from django.conf.urls.defaults *

# with
from reroute import *

尽管最好是明确的

# Replace
from django.conf.urls.defaults import handler404, handler500, patterns, url, include

# with
from reroute import handler404, handler500, patterns, url, include

HTTP动词分派

verb_url模式可以匹配正则表达式以外的HTTP动词

from reroute.verbs import verb_url

urlpatterns = patterns('myapp.views',
    url('^regular$', 'regular_old_view'),
    verb_url('GET', '^restful$', 'restful_view')
)

verb_url模式的正则表达式可以过载,使路由仅基于HTTP动词

urlpatterns = patterns('myapp.views',
    verb_url('GET', '^restful$', 'restful_view'),
    verb_url('PUT', '^restful$', 'another_restful_view')
)

RESTful资源示例

paychecks = patterns('myapp.views.employees.paychecks',
    verb_url('GET',     '^paychecks$', 'index_paychecks'),
    verb_url('POST',    '^paychecks$', 'add_paycheck'),
)

urlpatterns = patterns('myapp.views.employees',
    verb_url('GET',     '^employees$', 'index_employees'),
    verb_url('POST',    '^employees$', 'add_employee'),

    verb_url('GET',     '^employees/(?P<employee_id>\d+)$', 'show_employee')
    verb_url('PUT',     '^employees/(?P<employee_id>\d+)$', 'update_employee')
    verb_url('DELETE',  '^employees/(?P<employee_id>\d+)$', 'delete_employee'),

    url('^employees/(?P<employee_id>\d+)/', include(paychecks)),
)

渲染模板

返回要添加到模板上下文的值字典

@render('template.html')
def view(request):
    return {'title': 'This is the page title'}

    # The template is rendered using a RequestContext instance

如果您需要,返回HttpResponse并使用它

@render('template.html')
def view(request):
    if special_case:
        return HttpResponse('This response will be used instead of rendering template.html')
    else:
        return {'title': 'This is the page title'}

重定向

返回作为反向kwargs使用的值字典

@redirect('other_view_name')
def view(request):
    return {'view_kwarg': 42}

    # This is equivalent to:
    # return HttpResponseRedirect(reverse('other_view_name', kwargs={'view_kwarg': 42}))

@render('other_tempate.html')
def other_view(request, view_kwarg):
    return {
        'title': 'This is the other view page title',
        'message': 'Meaning of life? {0}'.format(view_kwarg)
    }

再次,如果您返回HttpResponse,则使用它

@redirect('other_view_name')
def view(request):
    if special_case:
        return HttpResponse('This response will be used instead of redirecting')
    else:
        return {'view_kwarg': 42}

内部:包装器

包装器类似于中间件,应用于一组选择的URL。包装器是任何接受以下参数的可调用对象:viewrequest*args**kwargs

import logging
from reroute import reroute_patterns

def wrapper_one(view, request, *args, **kwargs):
    logging.debug("wrapper one")
    return view(request, *args, **kwargs)

def wrapper_two(view, request, *args, **kwargs):
    logging.debug("wrapper two")
    return view(request, *args, **kwargs)

urlpatterns = reroute_patterns([wrapper_one, wrapper_two], 'myapp.views',
    verb_url('GET', '^restful$', 'restful_view'),
    verb_url('PUT', '^restful$', 'another_restful_view')
)

您甚至可以创建自己的模式替换

from functools import partial

patterns = partial(reroute_patterns, [wrapper_one, wrapper_two])

urlpatterns = patterns('myapp.views',
    verb_url('GET', '^restful$', 'restful_view'),
    verb_url('PUT', '^restful$', 'another_restful_view')
)

1.1.1版本中的更改

  • [新增] 增加了对Django 1.3的支持

1.1.0版本中的更改

  • [新增] 在reroute.decorators中添加了renderredirect装饰器,以简化常见的视图任务(例如渲染模板或重定向到另一个视图)

  • [修复] verb_url模式偶尔被错误地分组,导致405响应。Python维护一个正则表达式缓存,该缓存在100条记录后清除,verb_url模式按正则表达式对象分组,而不是按正则表达式模式分组。当缓存被清除时,具有相同正则表达式模式的正则表达式对象不再相等。

1.0.1版本中的更改

  • [修复] PyPI软件包与pip不兼容

1.0.0版本中的更改

  • [新增] 添加了对csrf_exempt装饰器的支持

  • [修复] 对于具有相同正则表达式的verb_url模式,使用了错误的默认kwargs

作者

django-reroute由Mark Sandstrom编写。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源代码分发

django-reroute-1.1.1.tar.gz (7.9 kB 查看散列)

上传时间 源代码

支持者: