3

サフィックスが次のようになっている必要があることを確認してください。

RestangularProvider.setRequestSuffix('/?format=json');

それ以外の場合、django はクライアントに戻るリダイレクトを投げていましたが、それが機能している間は正しくありませんでした。


最後の変更は、次を追加することです。

RestangularProvider.setRequestSuffix('?format=json');

モジュール定義で削除し、サービス定義から削除します。このようにして、Restangular は、django レスト フレームワーク バックエンドによって期待される方法で 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 Delete を起動します):

 $scope.events[someRandomIndex].remove()

サーバー側では、ID が返されていることを確認する必要があります。django rest フレームワークでは、これには、id を含めるために mixin が使用される以下のようなソリューションが含まれます。

これについて考えてくれた人に感謝します。


進行中 - ID の代わりに URL が返されたようです。このリンクhttp://abesto.net/django-rest-framework-add-id-to-in-hyperlinkedmodelserializer/は、リンクが将来機能しない場合に備えて、id.in を追加するシリアライザーに 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

Idが間違った場所に追加されているため、問題は私のリソース/ relangularリソース定義のファクトリメソッドにあると思います(元々ハッキングしていたためだと思います):

  spaceJam.factory('EventsResource', function (Restangular) {
        return Restangular.all('events/?format=json')
    })

そのため、文字列 '/?format=json' を削除し、別の時点で再度追加する必要があります。


更新は、送信されているメソッドがルート ノードに送信されているようです。私はangularjsを使用しており、私の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 フレームワークを使用しています。グーグルでこれを見つけることができなかったので、ここで親切で知識のある人々に尋ねています. 事前に感謝します。さらにコードを投稿する必要がある場合はお知らせください。

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

ビュー.py

class EventViewSet(viewsets.ModelViewSet):
    paginate_by = None
    queryset = Event.objects.all()
    serializer_class = EventSerializer
4

1 に答える 1

1

元の投稿で回答しますが、含まれています

  1. IDが残りのサービスで返されることを確認し、
  2. 角度付きリソースをカプセル化する角度ファクトリは、URL を動的に構築できるように行われます。
  3. URL パラメータをリクエスト サフィックスに移動します。
于 2013-08-22T12:53:23.973 に答える