2011-11-16 11 views
2

私はこのチュートリアルにちょうど従いました。 http://weblog.mattdorn.com/content/restful-web-apps-with-django-piston-and-ext-js/django-pistonのデータを更新(PUT)および削除(削除)できません

私が自分で作成した場合、addメソッドは正常ですが、削除と更新はできません。 は、ここに私のrunserverのコンソールです:

[16/Nov/2011 00:11:17] "DELETE /api/phonebooks/10 HTTP/1.1" 301 0 
[16/Nov/2011 00:11:17] "GET /api/phonebooks/10/ HTTP/1.1" 200 255 
[16/Nov/2011 00:11:23] "PUT /api/phonebooks/12 HTTP/1.1" 301 0 
[16/Nov/2011 00:11:23] "GET /api/phonebooks/12/ HTTP/1.1" 200 253 

私はそれを削除して、データを更新すると思うが、それは何も変更がないように、データを再度呼び出します。私は私のhandlers.pyにデバッグを実行すると、それは更新メソッドに行くことができません。

#handlers.py 
from django.utils import simplejson 

from piston.handler import BaseHandler 
from piston.utils import rc, require_mime, require_extended, validate 

from phonebook.phoneapp.models import Phonebook 
from phonebook.phoneapp.forms import PhonebookForm 

class PhonebookHandler(BaseHandler): 
    allowed_methods = ('GET', 'DELETE', 'POST', 'PUT') 
    fields = ('id','fullname','address','age','gender','phonenumber','user') 
    model = Phonebook 

    def create(self, request, *args, **kwargs): 
     if not self.has_model(): 
      return rc.NOT_IMPLEMENTED 

     attrs = self.flatten_dict(request.POST) 
     if attrs.has_key('data'): 
      ext_posted_data = simplejson.loads(request.POST.get('data')) 
      attrs = self.flatten_dict(ext_posted_data) 

     try: 
      inst = self.model.objects.get(**attrs) 
      return rc.DUPLICATE_ENTRY 
     except self.model.DoesNotExist: 
      inst = self.model(**attrs) 
      inst.save() 
      return inst 
     except self.model.MultipleObjectsReturned: 
      return rc.DUPLICATE_ENTRY 

    def update(self, request, id): 
     if not self.has_model(): 
      return rc.NOT_IMPLEMENTED 

     attrs = self.flatten_dict(request.POST) 
     if attrs.has_key('data'): 
      ext_posted_data = simplejson.loads(request.POST.get('data')) 
      attrs = self.flatten_dict(ext_posted_data)   

     inst = self.model.objects.get(id=id) 
     inst.fullname = attrs['fullname'] 
     inst.address = attrs['address'] 
     inst.gender = attrs['gender'] 
     inst.age = attrs['age'] 
     inst.phonebook = attrs['phonebook'] 
     inst.save() 

     return inst 

私もallowed_methodsを削除しようとしましたが、何も起こりません。

誰も私の状況について考えてもらえますか? ありがとうございました

答えて

0

リクエストURLに末尾にスラッシュを入れてください。

現時点では、スラッシュがないため、あなたのリクエストはDjangoによって末尾のスラッシュを含むアドレスに自動転送されています。その場合、リクエストは元の ' 「PUT」または「DELETE」を選択します。

これはDjangoのバグかもしれませんが、末尾にスラッシュを含めることで簡単に回避できます。

関連する問題