2

私はこのチュートリアルに従ったばかりで、例は素晴らしいです。http://weblog.mattdorn.com/content/restful-web-apps-with-django-piston-and-ext-js/

しかし、自分で作成する場合、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に対してdebugを実行すると、updateメソッドに入ることができません。

#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が、何も起こりません。

誰かが私の状況についてアイデアを与えることができますか?前もって感謝します

4

1 に答える 1

0

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

現在、末尾のスラッシュがないため、リクエストは Django によって末尾のスラッシュを含むアドレスに自動転送されています。この場合、リクエストは元の 'PUT' または ' ではなく 'GET' に変換されています。消去'。

これは Django のバグである可能性がありますが、末尾にスラッシュを含めることで簡単に回避できます。

于 2011-12-12T13:18:50.317 に答える