Skip to main content
 首页 » 编程设计

jquery之无法更新(PUT)和删除(删除)django-piston 中的数据

2025年05月04日28telwanggs

我刚刚学习了本教程,这个例子很棒。 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 但没有任何反应。

谁能告诉我我的情况? 提前致谢

请您参考如下方法:

确保在请求 URL 中放入尾部斜杠。

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

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