为什么request.files中的request.method =='POST'和'photo'

时间:2017-07-05 18:36:46

标签: python python-2.7 flask

我有这个小例子脚本。它从HTML获取文件并将其上传到服务器。那部分工作正常。请参阅下面的脚本。

如果表单中没有选择任何文件,我想采取一些措施。如果在HTML表单中没有选择任何文件,我认为以下内容将评估为false,但它接缝始终为true。

  if request.method == 'POST' and 'photo' in request.files:

是否选择了文件“返回文本”。

我在这里缺少什么?

任何提示都表示赞赏。

祝你好运 Kresten

from flask import Flask, render_template, request
from flask_uploads import UploadSet, configure_uploads, IMAGES

app = Flask(__name__)
photos = UploadSet('photos', IMAGES)

app.config['UPLOADED_PHOTOS_DEST'] = 'static'
configure_uploads(app, photos)

@app.route('/upload', methods=['GET', 'POST'])
def upload():
  if request.method == 'POST' and 'photo' in request.files:
    filename = photos.url(request.files['photo'])
    fil = request.files['photo']
    return 'Text to print'

  return render_template('upload.html')

if __name__ == '__main__':
  app.run(debug=True)
  app.run(host='0.0.0.0')

HTML模板:

<html>
<head>
        <title>Upload</title>
</head>
<body>
<form method=POST enctype=multipart/form-data action="{{ url_for('upload') }}">
    <input type=file name=photo>
    <input type="submit">
</form>
</body>
</html>

(感谢Danila拯救我的一天)

1 个答案:

答案 0 :(得分:2)

在您的情况下,photo始终位于request.files,但filename不会(可以是空字符串)。只需将条件更改为:

@app.route('/upload', methods=['GET', 'POST'])
def upload():
  if request.method == 'POST' and request.files['photo'].filename:
    filename = photos.url(request.files['photo'])
    fil = request.files['photo']
    return 'Text to print'

  return render_template('upload.html')