2

私はDjangoで次の設定をしています。画像アップロード用の CharField および FileField によって検証されるテキスト入力。フィールドが空の場合の望ましい応答は、フォームに元のデータが存在し、ユーザーが行う必要があるのは不足しているデータを入力することだけです。検証が必要になる可能性のある 2 つの状況と、アプリの応答方法の現在の状態をリストしました。

  • テキストは存在しますが、イメージは忘れられています。リロード後の結果: 元々投稿にあったテキストがまだ存在し、ユーザーがしなければならないことはファイルをアップロードすることだけです。これは希望どおりに機能します。優秀な
  • テキストは忘れられていますが、イメージは存在します。リロード後の結果: 画像が存在しなくなり、ユーザーが再度アップロードする必要がありますが、これは望ましくありません。

検証後にファイルデータを保持するにはどうすればよいですか?

view.py

def signin(request, template="signin.html"):

    c['form'] = SignInForm()
    if request.method == 'POST':
        c['form'] = SignInForm(request.POST, request.FILES)

        if c['form'].is_valid():

            #TODO: Commit data
            return redirect("somwhere_else.html")

    return render(request, template, c)

フォーム.py

class SignInForm(forms.Form):
    name = forms.CharField(max_length=50,required=True)
    photo_input = forms.FileField(required=True)
4

1 に答える 1

2

ここで私は見つけました:

「セキュリティ上の制限により、FileUpload コントロールに値を指定することはできません。

たとえば、そのような機能を持っていると想像してください。Web サーバー上のファイル パスを指定し、ユーザーがページを送信した後、実際にはユーザーによって選択されていないファイルをダウンロードしています。したがって、この場合、使用はユーザーのコンピューターからファイルを盗みます。したがって、ブラウザーは、クライアント側の FileUpload コントロールの機能を制限して、ユーザーがファイルを選択してサーバーへのアップロードを確認できるようにします。

そのため、ファイルの選択は、送信前にユーザーが実行できる最後のアクションにする必要があります。

または、AJAX アプローチを使用して、smth を選択するときにページ全体を送信しないでください。」

于 2014-10-23T20:41:13.680 に答える