替换django.conf.urls.defaults的一个drop-in,它支持http动词分派和视图包装。

django-reroute的Python项目详细描述


django reroute是一组简化视图的工具,特别是在实现rest api时。django reroute为支持http动词分派的django.conf.urls.defaults提供了一个替换项,这样您的视图就不会被if request.method == 'GET'语句弄乱。它还提供了一组漂亮的视图装饰器,用于简化常见任务,如使用requestcontext呈现模板,以及在请求处理后重定向到特定视图。

新闻

django 1.3现在从v1.1.1开始支持

下载

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

易于安装:

easy_install django-reroute

来源:

# Download the source and run
python setup.py install

将django reroute添加到项目中

django reroute是django.conf.url的替换项。默认值:

# 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动词调度

除了regex之外,谓词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模式regex可以重载,仅基于http verb启用路由:

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中的更改

  • [new]增加了对django 1.3的支持

版本1.1.0中的更改

  • [new]将renderredirectdecorators添加到reroute.decorators,以简化公共视图任务(即呈现模板或重定向到另一个视图)
  • [fixed]动词URL模式偶尔分组不正确,导致405个响应。python维护一个在100个条目之后被清除的regex缓存,verb_url模式由regex对象分组,而不是regex模式。清除缓存后,具有相同regex模式的regex对象不再相等。

版本1.0.1中的更改

  • [fixed]pypi包不能与pip一起工作

版本1.0.0中的更改

  • [new]添加了对csrf免除装饰符的支持
  • [fixed]不正确的默认kwargs用于具有相同regex的谓词url模式

作者

django reroute是由mark sandstrom写的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
主类中的java访问方法   Javalog4j不读取它的log4j。属性文件   雅加达ee通过Java(web应用程序)使用iText/任何其他使用现成数据的库生成PDF报告   lua使用java阅读TeamSpeak 3消息   将日期转换为BST java   java Spring引用ProxyFactoryBean中带有ref的protoyype bean   如何使java只打印一条带有if语句的消息   java如何通过JavaMail从雅虎服务器发送电子邮件?   使用百分比和BigDecimal的java测试   java如何对字符串数组排序   java验证器+MVC+REST::更新问题   java如何阻止eclipse如此频繁地挂起?   java从AsyncTask(片段内)访问TextView   IDEJava:制作可调整大小和拖动的组件