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。包装器是任何接受以下参数的可调用对象:view、request、*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中添加了render和redirect装饰器,以简化常见的视图任务(例如渲染模板或重定向到另一个视图)
[修复] verb_url模式偶尔被错误地分组,导致405响应。Python维护一个正则表达式缓存,该缓存在100条记录后清除,verb_url模式按正则表达式对象分组,而不是按正则表达式模式分组。当缓存被清除时,具有相同正则表达式模式的正则表达式对象不再相等。
1.0.1版本中的更改
[修复] PyPI软件包与pip不兼容
1.0.0版本中的更改
[新增] 添加了对csrf_exempt装饰器的支持
[修复] 对于具有相同正则表达式的verb_url模式,使用了错误的默认kwargs
项目详情
django-reroute-1.1.1.tar.gz的散列
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | d5638d4c07c9323606ca81c91875c3acf61f6d4dc3ee54fe14963dc02b517a60 |
|
| MD5 | d075fa9cf139dbc0067cee905ab5f6b8 |
|
| BLAKE2b-256 | 3bc0e4c018acb121ea208152cb6fa95dcc1c69880d6f661839f21d2a23f34e45 |