无法以多部分形式获取post参数

2024-09-28 12:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在引导页面的一个模态中显示了以下表单 目的是上传一个带有隐藏id的文件 该应用程序基于googleappengine、Python/Webapp2

<form action="someUrl" role="form" method="POST" enctype="multipart/form-data">
                    <input type="hidden" name="entityId" value="{{datastoreEntity.key.id()}}"/>
                 <input name="importFile" type="file" multiple>
                 <input type="text" class="form-control" readonly>

                    <input type="submit" name="submit" value="Import">


                </form>

问题出在相关的RequestHandler(服务器端),在那里我可以用

    raw_file = self.request.POST.multi['importFile'].file

但是我无法获取id(它是由Jinja2正确生成的-在页面源代码中检查)。我已经试过了

     self.request.get('entityId')
     self.request.POST['entityId']
     self.request.POST.multi['entityId']

Tags: nameselfformidinputvaluerequesttype
2条回答

通过appengine中的文件输入上传需要App使用从blobstoreapi获得的路径。它的文档是here。所以你可能想做些

upload_url = blobstore.create_upload_url('/someUrl')

然后将其注入模板中,以便表单可以使用它

<form action="{{upload_url}}" ...

文件上载完成后,blobstore将重定向到/someUrl,在那里处理表单的其余部分,包括.file。你知道吗

我无法再现你用最简单的方式叙述这个问题。我已经将该模板复制到form.html,将/直接复制到MainHandler,并除去通常的准备工作(导入,jinja_environment,在当前目录中有一个FileLoader,等等,我有):

class It(ndb.Model):
    name = ndb.StringProperty()

class MainHandler(webapp2.RequestHandler):
    def get(self):
        dse = It(name="Willy")
        dsek = dse.put()
        datastoreEntity = dsek.get()
        template = jinja_environment.get_template('form.html')
        self.response.write(template.render(dict(
            datastoreEntity=datastoreEntity,
        )))
    def post(self):
        self.response.headers['Content-Type'] = 'text/plain' 
        self.response.write(self.request.get('entityId'))

访问/,选择一个文件,然后单击Import按钮,我在浏览器上看到:5066549580791808,这似乎是一个典型的数据存储实体ID,如所需。你知道吗

请“插入”这个玩具超级简化版之间,毫无疑问,更复杂的事情你正在尝试做,并编辑你的Q向我们展示最简单的方法,你可以重现你的问题,谢谢!你知道吗

相关问题 更多 >

    热门问题