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 |