使用django管理风格注册为模型提供与backbone.js兼容的rest api。
django-backbone的Python项目详细描述
概述
此应用程序为您的模型提供了与backbone.js兼容的rest api。它遵循扩展、重写和注册的django管理模式;并为定制提供了一个可扩展的基于类的视图。
这样,您就可以拥有快速、开箱即用的功能,也可以重写任何方法或变量来定制您喜欢的东西。
例如:
# fooapp/backbone_api.py import backbone from fooapp.models import Foo class FooAPIView(backbone.views.BackboneAPIView): model = Foo display_fields = ('title', 'description') ordering = ('creation_date', 'id') backbone.site.register(FooAPIView)
更高级的定制可以通过钩住继承类上的方法来实现——继承类本身就是一个基于类的视图。例如:
... class FooAPIView(backbone.views.BackboneAPIView): model = Foo display_fields = ('title', 'description',) ordering = ('creation_date', 'id') def post(self, request): return HttpResponseForbidden('No adding allowed!') def queryset(self, request): # Only return "active" objects return Foo.objects.filter(is_active=True).order_by('-id') def has_delete_permission(request, obj): return request.user.is_staff # Only staff can delete objects ...
功能
- 自动为您的模型生成json rest api,该api与backbone.js很好地配合使用。
- 基于基于类的视图和模型表单的api,允许细粒度定制和扩展。
- 可自定义的权限限制。默认情况下,它使用django.contrib.auth身份验证和权限(类似于django admin)。
用法
- 在app文件夹中创建一个backbone_api.py文件,并通过子类化backbone.views.BackboneAPIView注册api定义。
# fooapp/backbone_api.py import backbone from fooapp.models import Foo class FooAPIView(backbone.views.BackboneAPIView): model = Foo display_fields = ('title', 'description') ordering = ('creation_date', 'id') backbone.site.register(FooAPIView) See section on 'BackboneAPIView Options' for a full list of options available.
- 在javascript集合/模型定义中,将url/urlRoot设置为指向django-backboneapi:
// Assuming you have a Backbone model called 'Foo' and a collection 'FooCollection' Foo.prototype.urlRoot = "{% url 'backbone:fooapp_foo' %}"; FooCollection.prototype.url = "{% url 'backbone:fooapp_foo' %}"; See section on 'URL reversing' below for details on the url naming.
- (可选)如果启用了CSRF保护,则需要修改backbone.sync命令以发送CSRF令牌:
<script> // (Optional) Do this if you are using csrf protection: // See: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/ var oldSync = Backbone.sync; Backbone.sync = function(method, model, options) { options.beforeSend = function(xhr){ xhr.setRequestHeader('X-CSRFToken', '{{ csrf_token }}'); }; return oldSync(method, model, options); }; </script>
就这样。现在您应该能够在主干集合和模型上执行fetch()、save()等操作。
权限
默认情况下,django-backbone阻止添加、更新或删除请求,除非用户已登录并分别具有can_add、can_change或can_delete权限。这遵循django管理中使用的权限,但有一个例外-允许在所有注册的模型上公开读取。
这可以通过重写适当的权限挂钩来更改(请参阅“BackboneAPIViewoptions”部分)。
BackboneAPIView选项
请检查类backbone.views.BackboneAPIView的源代码以获取钩子的完整列表。这些方法由它们的docstring记录。
以下是一些您可以自定义的基本选项:
- model:用于此api定义的模型
- display_fields:要为读取(get)请求返回的字段,
- fields:添加(post)或编辑(put)对象时允许的字段。
- form:用于添加或编辑对象的窗体类。
- ordering:检索集合时使用的排序
- paginate_by:每页最大对象数(允许使用pageget参数)。
反转api url
以下命名的URL模式适用于所有已注册的型号:
- 集合URL:^{TT23}$(返回到^{TT24}$)
- 模型URL:^{TT25}$(返回到^{TT26}$)
您可以通过在BackboneView类上指定url_slug属性来更改url(和url名称)中的<model_name>(只需确保它不会与其他视图冲突)。
安装
注意:django-backbone需要django 1.3或更高版本。
将backbone添加到设置文件中的INSTALLED_APPS。
- 钩住url并调用backbone.autodiscover()(它将在您的应用程序中找到所有backbone_api.py文件):
# urls.py import backbone backbone.autodiscover() urlpatterns += patterns('', (r'^backbone/', include(backbone.site.urls)), )
运行测试
# For Django 1.6+ ./manage.py test backbone.tests --settings=backbone.tests.settings # For Django < 1.6 ./manage.py test tests --settings=backbone.tests.settings
替代品/灵感
这个应用程序借鉴了其他开源django/backbone集成应用程序的概念和模式。值得一看,因为它们可能更适合您的用例:
- djangbone:使用基于类的视图的轻量级、简单的概念。
- backbone-tastypie:使用django-tastypie时有点重它可以提供一些强大的api特性,比如限制和缓存。
许可证
此应用程序是根据BSD许可证授权的。有关详细信息,请参见许可文件。