【问题标题】:unable to update (PUT) and delete (delete) data in django-piston无法更新(PUT)和删除(删除)django-piston 中的数据
【发布时间】:2011-11-16 06:18:15
【问题描述】:

我刚刚按照本教程进行操作,示例很棒。 http://weblog.mattdorn.com/content/restful-web-apps-with-django-piston-and-ext-js/

但是当我自己创建时,添加方法可以,但删除和更新方法不行。 这是我的运行服务器的控制台:

[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,但没有任何反应。

有人可以对我的情况提供一些想法吗? 提前谢谢

【问题讨论】:

    标签: jquery python django extjs django-piston


    【解决方案1】:

    确保您在请求 URL 中添加了尾部斜杠。

    现在,由于缺少斜杠,Django 会自动将您的请求转发到包含斜杠的地址 - 在这种情况下,请求将被转换为“GET”而不是原始的“PUT” ' 或 '删除'。

    这可能是 Django 中的一个错误,但您可以通过包含尾部斜杠轻松解决它。

    【讨论】:

      猜你喜欢
      • 2020-01-05
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 2016-12-24
      相关资源
      最近更新 更多