使用MultipartPostHandler后,get_current_user()在POST请求后返回None

时间:2014-01-30 14:36:46

标签: python google-app-engine login multipart

我尝试以编程方式POST而不是使用网络表单。为此,我使用从https://pypi.python.org/pypi/MultipartPostHandler/下载的MultipartPostHander模块。

它看起来运行良好(即,与Web表单POST请求执行的操作相同),但user.get_current_user()在POST页面处理程序中返回None。相比之下,如果POST请求是由Web表单提交的,则相同的POST页面处理程序会正确返回用户信息。

还尝试了海报(http://atlee.ca/software/poster/index.html)并遇到了完全相同的问题。

为什么会发生这种情况?提前谢谢。

class first_page_handler(basehandler.BaseHandler):
     def get(self):
         user = users.get_current_user()
         if user:
            raw_upload_url = webapp2.uri_for('test_module')
            qimage_upload_url = r'http://localhost:8080'+raw_upload_url
            params = {'param1': 'param'}

            opener = urllib2.build_opener(multipost.MultipartPostHandler)
            urllib2.install_opener(opener)
            req = urllib2.Request(qimage_upload_url, params)

            response = urllib2.urlopen(req)   #  <<<< POST request submitted
            text_response = response.read().strip()
            return self.response.write("<html><body><p>"+text_response+"</p></body>
                                       </html>")
         else:
            login_url = users.create_login_url("/admin")
            context = {'login_url': login_url}
            self.render_response('admin/login.html', **context)

class post_page_hander(basehandler.BaseHandler):
    def post(self):
       user = users.get_current_user()    #  << Returns NONE
       return self.response.write("<html><body><p>"+user.email()+"</p></body></html>")

1 个答案:

答案 0 :(得分:0)

您没有在请求中设置任何Cookie,因此服务器不知道当前用户是什么。 (你正在做的事情是不寻常的......可能有更好的方式去做你想做的事。)