2017-11-28 4 views
0

この問題は数時間前から私を困惑させていました。私は 更新プロファイルページを設計しています。ユーザーが望む場合は、ユーザーが写真を更新できます。オプションの画像入力フィールドがセッションを蹴飛ばす

問題は、イメージ入力フィールドを空白にして他のフィールドを編集してサブミットすると、何も変更されずにセッションが蹴られてしまいます。私はそれを設計したように更新され、機能が実行されます。ここで

は、関連するコードです:

class User(models.Model): 
    photo = models.CharField(max_length=100, null=False, blank=True) 

私は、データベース内の画像への参照のみを保存だってそれは」CharFieldですです。

HTML:

<input type="file" name='photo' class="form-control"> 

ビュー:

if request.method == 'POST': 

    photo = request.FILES['photo'] 
    if photo: 
     fs = FileSystemStorage() 
     filename = fs.save(photo.name, photo) 
     uploaded_file_url = fs.url(filename) 
     if uploaded_file_url[-4:] not in ALLOWED_EXTENSIONS: 
       error = 'Invalid File Type' 
       errors.append(error) 

    print(uploaded_file_url) 

あなたはprint文を無視することができます。私はこの機能の全面にそれらの束を広げたので、各段階で機能がどのように機能するかを見ることができます。これにより、ファイル入力フィールドが空白のままになっても、他のコードが処理されなくなり、プログラムが終了することが確認できました。しかし明らかにこのフィールドはおそらくオプションです。私はインデントもチェックしました。私の頭を込めて。

何か考えていますか?

答えて

0

私は、uploaded_file_url変数を初期化しないことによって関数の実行を破壊しました。 request.FILES['photo']request.FILES.get('photo')に変更しようとしましたが、動作は少し異なりますが、動作の違いは全く分かりません。私が.get('photo')を使用したときにこれを短くすると、ブラウザでエラーが発生し、その時は何が間違っているのかがわかりました。変数を初期化するだけです。

主な違いは、request.FILES['xxx']は、コードについて何か問題があると、エラーを発生させないということです。単語がなくても終了しますが、request.get('xxx')はエラーを発生させます。

関連する問題