检查后缀是否需要:
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。
感谢所有想到这一点的人。
取得进展 - 显然网址被归还而不是id。此链接http://abesto.net/django-rest-framework-add-id-to-in-hyperlinkedmodelserializer/概述了在序列化程序中添加混合,该序列化程序添加了id.in案例,该链接在将来不起作用,以下是相关代码段:
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,因为我建立了一个与我无关的非盈利网站。我能够为列表/元素数组发出gets。 “添加”(post)方法有效,现在我正在尝试连接删除。我的服务器响应是:
{"detail": "Method 'DELETE' not allowed."}
所以我认为我需要获得动词的许可 - 但我不知道在哪里。我正在使用DJANGO REST Framework。我无法在谷歌找到这个,所以我在这里问那些善良和知识渊博的人。提前感谢您,如果我需要发布更多代码,请告诉我。
urls.py
router = routers.DefaultRouter()
router.register(r'events', views.EventViewSet)
urlpatterns = patterns('',
(r'^', include(router.urls)),
)
models.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)
serializers.py
class EventSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Event
views.py
class EventViewSet(viewsets.ModelViewSet):
paginate_by = None
queryset = Event.objects.all()
serializer_class = EventSerializer
答案 0 :(得分:1)
在原帖中回答,但包括