App Engine Python未从Django页面接收GET参数值

0 投票
1 回答
604 浏览
提问于 2025-04-17 10:06

我正在尝试从一个用Django构建的页面向App Engine服务器发送一个GET请求。我在Django部分设置了参数,但在App Engine中,参数的值却是空的。

我在Django那边记录了参数的值,结果显示是正常的。

这是我的Django代码:

try:
        username = request.session['username']
        params = urllib.urlencode('user', username)
        headers = {"Content-type":"application/x-www-form-urlencoded", "Accept":"text/plain"}

        conn = httplib.HTTPConnection(connections_strings.auth)
        conn.request("GET", connections_strings.auth, params, headers)
        response = conn.getresponse()
        jsonString = response.read()
        return render_to_response('home/index.html', locals(), context_instance=RequestContext(request))

这是我的App Engine代码:

def get(self):
        username = self.request.get('user') # Get the username parameter 
        query_user = UserEntity.all()
        query_user.filter('username = ', username)
        user_data = []
        for user in query_user:
            record = { //Create the JSON.. }
            user_data.append(record)

        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(simplejson.dumps(user_data))

在App Engine中,get(self)这个方法被调用了,我在这里放了一个日志信息,它确实被打印出来了。

所以,问题是,在App Engine那边,self.request.get('user')返回的是空值。这很奇怪,因为我从手机端发出的GET请求用同样的方法是完全正常的。

有什么想法吗?

谢谢!

1 个回答

3

在HTTP的GET方法中,查询参数是通过网址传递的:

http://example.com?user=foo

request()这个方法是这样定义的:

HTTPConnection.request(method, url[, body[, headers]])

所以通过这样做:

conn.request("GET", connections_strings.auth, params, headers)

你实际上是把参数放在了请求的主体里。

试试这个方法:

selector = '{}?{}'.format(connections_strings.auth, params)
conn.request("GET", selector, headers=headers)

撰写回答