检查它的后缀需要是:
RestangularProvider.setRequestSuffix('/?format=json');
否则 django 会向客户端抛出一个重定向,虽然它工作 - 它是不正确的。
最后的更改是添加:
RestangularProvider.setRequestSuffix('?format=json');
在您的模块定义中,并将其从服务定义中删除。这样restangular可以以django rest框架后端所期望的方式构建url。因此,应该在 JS 端设置一个服务:
var spaceJam = angular.module('spaceJam', ['ui.bootstrap', 'restangular'])
.config(function (RestangularProvider) {
RestangularProvider.setRequestSuffix('?format=json');
RestangularProvider.setResponseExtractor(function (response, operation) {
// blah
return response ;
})
})
spaceJam.factory('EventsResource', function (Restangular) {
return Restangular.all('events')
})
注入您的控制器并作为列表访问:
EventsResource.getList().then(function(events){
$scope.events = events
})
并删除一个项目(触发 HTTP 删除):
$scope.events[someRandomIndex].remove()
在服务器端,您需要确保返回 ID。在 django rest 框架中,这包括像下面这样的解决方案,其中使用 mixin 来包含 id。
感谢任何对此进行思考的人。
取得进展 - 显然是返回 url 而不是 id。此链接http://abesto.net/django-rest-framework-add-id-to-in-hyperlinkedmodelserializer/概述了在添加 id 的序列化程序中添加一个 mixin。以防该链接将来不起作用,这是相关的片段:
class WithPkMixin(object):
def get_pk_field(self, model_field):
return self.get_field(model_field)
class EventSerializer(WithPkMixin, serializers.HyperlinkedModelSerializer):
class Meta:
model = Event
我认为问题现在出在我的资源/restangular 资源定义的工厂方法中,因为 Id 附加在错误的位置(我认为是因为我最初是在进行黑客攻击):
spaceJam.factory('EventsResource', function (Restangular) {
return Restangular.all('events/?format=json')
})
所以字符串 '/?format=json' 需要被删除,并在其他地方重新添加。
更新看起来像是发送到根节点的方法。我正在使用 angularjs 和 restangular 我的 javascript 看起来像:
spaceJam.factory('EventsResource', function (Restangular) {
return Restangular.all('events/?format=json')
})
var CalendarListCtrl = function($scope, $timeout, EventsResource) {
var timeout = 10000
$scope.events = []
$scope.refresh = function (){
EventsResource.getList().then(function(events){
$scope.events = events
})
}
var asychUpdate = function(){
$scope.refresh()
//$timeout(asychUpdate, timeout);
}
asychUpdate()
$scope.delete = function(urlToDelete) {
var eventToDelete = _.find($scope.events, function(one) {
return one.url === urlToDelete;
});
eventToDelete.remove();
$scope.refresh()
}
}
因此,虽然 remove 方法看起来被记录为从列表中删除项目的方式 - 它似乎没有正确的 URL。
我正在学习 django / python,因为我为与之相关的非营利组织建立了一个网站。我能够为元素列表/数组发出获取。“添加”(发布)方法有效,现在我正在尝试连接删除。我的服务器响应是:
{"detail": "Method 'DELETE' not allowed."}
所以我假设我需要允许那个动词——但我不知道在哪里。我正在使用 DJANGO REST 框架。我无法在谷歌上找到这个,所以我在这里询问善良和知识渊博的人。提前谢谢你,如果我需要发布更多代码,请告诉我。
网址.py
router = routers.DefaultRouter()
router.register(r'events', views.EventViewSet)
urlpatterns = patterns('',
(r'^', include(router.urls)),
)
模型.py
class Event(models.Model):
title = models.CharField(max_length=200)
recurring = models.BooleanField()
day = models.CharField(max_length=20, blank=True)
date = models.DateField(null=True, blank=True)
time = models.TimeField()
description = models.CharField(max_length=500)
venue = models.CharField(max_length=200, blank=True)
venueAddress = models.CharField(max_length=200, blank=True)
venueCity = models.CharField(max_length=200, blank=True)
序列化程序.py
class EventSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Event
视图.py
class EventViewSet(viewsets.ModelViewSet):
paginate_by = None
queryset = Event.objects.all()
serializer_class = EventSerializer