替换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是否可以在数组中打印一行元素?   Java框架   javadom4j:用<any>标记包装所有元素   java JMH,微基准代码的一部分   JavaFX拖放TableCell   Java中的volatile关键字   如何在JAVA中使用ApachePOI删除Excel中的警告?   java Android firebase数据库权限被拒绝,尽管用户已登录   eclipse如何在类文件中控制按钮。java文件?   java Android如何从API(rottentomatoes)JSON获取url/链接   java Proguard和两个使用相同安卓库的项目。广播。ClassNotFoundException   Oracle DomParser的java解析XXE   java组织。冬眠cfg。添加注释类所在的包的配置   有没有办法通过JNI将Java数组传递给C而不复制它?   java从XML文件加载请求代码   java表单布局调用JColorChooser   java如何使用Spring boot在neo4j中保存多边形   获取java中的URL参数并从该URL提取特定文本