2017-03-16 45 views
0

嘗試使用Flask上傳文件時出現錯誤'NoneType' object has no attribute 'filename'Flask WTF上傳文件錯誤

我正在關注documentation,但是我無法完成它的工作。

class SubmitLocations(Form): 
    title = TextField("Name Of Location (What do the locals call it)") 
    description = TextField("Please describe the location") 
    upload = FileField("Please select an image to upload") 


@app.route('/add_spot/', methods=["GET","POST"]) 
@login_required 
def add_spot(): 
    try: 
     form = SubmitLocations(request.form) 

     if request.method == "POST": 
      title = form.title.data 
      description = form.description.data 
      f = form.upload.data 
      filename = secure_filename(f.filename) 
      f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 

這裏是我的HTML表單

<form method=post enctype="multipart/form-data" action="/add_spot/"> 
    <dl> 
     {{render_field(form.title)}} 
     {{render_field(form.description)}} 
     {{render_field(form.upload)}} 
    </dl> 
    <p><input type=submit value=Submit></p> 
    </form> 

頁面呈現就好了,我可以選擇要上傳的文件,但是當我提出我得到我上面提到的'NoneType' object has no attribute 'filename'我想知道如果錯誤任何人都可以指出我的錯誤?也許我遺漏了一件重要的作品?

一些需要注意的,如果刪除了文件上傳部分,我可以在所有提交此表沒有任何錯誤。

回答

1

好像你已經提交沒有文件的表單。您需要首先驗證表單。如果您依賴該文件,請將FileRequired添加到驗證器。

from flask_wtf.file import FileRequired 


class SubmitLocations(Form): 
    # ... 
    upload = FileField("Please select an image to upload", validators=[FileRequired()]) 


def add_spot(): 
    form = SubmitLocations(request.form) 

    # changed this line 
    if form.validate_on_submit(): 
     title = form.title.data 
     description = form.description.data 
     f = form.upload.data 
     filename = secure_filename(f.filename) 
     f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
+0

你是正確的。然後,我不得不在我的try語句中添加'和驗證器'。上傳工作,感謝您的幫助。 – BrettJ