【问题标题】:Trouble with receiving data from <form>从 <form> 接收数据时出现问题
【发布时间】:2010-08-25 13:45:42
【问题描述】:

HTML:

<form enctype="multipart/form-data" action="/convert_upl" method="post">          
         Name:  <input type="text" name="file_name">
         File:  <input type="file" name="subs_file"> 
        <input type="submit" value="Send">
</form>

Python(谷歌应用引擎):

if self.request.get('file_name'):
                    file_name = self.request.get('file_name')

我的问题是我没有收到来自 file_name 文本输入的数据。我知道问题在于它存在于 enctype="multipart/form-data" 表单中,但我不知道如何解决它 - 我的意思是如何一键从输入中接收文件和字符串提交按钮。

提前致谢。

【问题讨论】:

  • 假设您使用的是格式正确的 HTML 是否安全?您的标签周围没有 ....也尝试在没有 multipart/for-data 编码类型的情况下通过您的表单传递一个字符串,看看您的表单代码是否真的有效。
  • 对于代码片段的外观,我很抱歉,尽管我在这里找不到任何格式化它的帮助 - 在 stackoverflow 上。
  • 使用带有 1 和 0 的第 5 个图标
  • No 是有意的 - 原因在我的评论中。
  • 感谢更新格式

标签: python html google-app-engine cgi


【解决方案1】:

uploading 示例代码对我来说很好用。您是否尝试过完全使用该代码?它对你有用吗,或者你发现了什么问题?

如您所见,该示例的表单与您使用的编码相同:

      <form action="/sign" enctype="multipart/form-data" method="post">
        <div><label>Message:</label></div>
        <div><textarea name="content" rows="3" cols="60"></textarea></div>
        <div><label>Avatar:</label></div>
        <div><input type="file" name="img"/></div>
        <div><input type="submit" value="Sign Guestbook"></div>
      </form>

在 HTML 中正确使用 label 标记来显示字段标签会更加小心,但这只会影响表单在浏览器中呈现时的外观。

Python 代码也与您展示的类似(对于您展示的小子集):

def post(self):
    greeting = Greeting()
    if users.get_current_user():
        greeting.author = users.get_current_user()
    greeting.content = self.request.get("content")
    avatar = self.request.get("img")
    greeting.avatar = db.Blob(avatar)
    greeting.put()
    self.redirect('/')

当然/sign URL 指向我们刚刚展示的do_post 方法的类。

那么,如果这段代码有效而您的无效,那么区别在哪里?不在您向我们展示的部分中,因此它必须在您没有展示的某些部分中...您能否从 Google 复制有关此示例代码的部分是否正常工作?

【讨论】:

  • 我很惭愧...由于不整洁,我修改了错误的方法,其正文和名称与好的方法非常相似...嗯,对不起,感谢您的努力。
  • @user,没有羞耻——犯错是人为的,因为(信不信由你)大多数程序员都是人,所以我们都会犯错!-) 发现、承认和纠正我们不可避免地犯的错误是卓越的标志,因为它不能是“从不犯任何错误”;-)。
【解决方案2】:

您正在使用 POST 方法发送数据,但随后尝试使用 GET 方法获取数据。

而不是

self.request.get('file_name')

做类似的事情

self.request.post('file_name')

【讨论】:

  • 没有帮助。另外,我收到带有 self.request.get 的文件没有问题。
  • 那么你收到的是文件数据,还是文件名?
  • .get 是请求对象的一种方法,被视为类似字典的映射;它与使用的 HTTP 方法 GET 或 POST 无关!
  • self.request.get('subs_file')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
相关资源
最近更新 更多