Python / Google App Engine 中的 PUT 参数无效

3 投票
1 回答
1392 浏览
提问于 2025-04-16 09:04

我正在用Python和Google App Engine上的webapp框架开发一个简单的RESTful网络服务。

基本上,我通过AJAX/jquery发送所有请求——对于POST请求,一切都很顺利,但当我用PUT请求发送数据时,参数却是空的,没被处理。

这是我的PUT请求:

    $.ajax({
        type: "PUT",
        url: "/boxes",
        data: { name: this.name, archived: this.archived  },
        success: function(msg){
        }
    });

Firebug显示我正在发送:

Parameter   application/x-www-form-urlencoded
archived    false
name    123112323asdasd

但是使用这段Python代码:

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util, template
from google.appengine.ext import db
from google.appengine.api.datastore_types import *
from django.utils import simplejson as json

import cgi
import datetime

class BoxHandler(webapp.RequestHandler):

def post(self): #working
    print "test"
    self.response.out.write(self.request.get("name"))

def put(self):
    print "test" #not working
    self.response.out.write(self.request.get("name"))

只会返回

test
Status: 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Content-Length: 0

所以……嗯,我是不是漏掉了什么?

谢谢,

马丁

1 个回答

4

你代码里的 put 方法调用是正确的,因为你可以看到 test 被打印出来了;不过,参数解析这部分有问题,这个问题在 webob 类里是一个未解决的问题

你可以尝试解析请求的 body 内容,来提取查询字符串。

def put(self):
    print "test"
    name = parse_body_to_extract_your_parameter(self.request.body)
    self.response.out.write(name)

撰写回答