2009-10-13 35 views
0

這可能是一個非常簡單的問題,但我在互聯網上找不到一個。無效表單無效的上傳字段

我正在寫一個Django應用程序。我有一個不需要ImageField的表單。在用戶提交表單(帶有圖像)後,如果表單無效,則在服務器端,我使用請求數據和文件填充表單(例如:form = FooForm(request.DATA, request.FILES, instance = foo),並將響應發送回客戶端。

在客戶端其他字段顯示OK,但圖像字段不指向任何地方。由於圖像字段不是必需的,用戶通常會忽略情況並重新提交沒有圖像的表單。

即使這是一個問題,或者無論如何預計它會工作,我都會迷失方向。如果這是一個問題,請說明以便我提供更多詳細信息。

回答

1

這是瀏覽器安全方式不可避免的結果。任何服務器端系統都不可能設置文件上傳字段的初始值,如同任何其他輸入字段一樣。這是爲了阻止惡意網站在未經您的許可的情況下從您的計算機上傳內容 - 否則,例如,網站可能會將該字段設置爲您的密碼文件的默認值。

顯然,如果你真的想要用戶上傳的文件,這是一個問題 - 如果表單最初是無效的,它將不會被保存,並且第二次通過文件將丟失,除非用戶上傳它再次。一種可能的解決方案可能是將文件上傳作爲第二個頁面 - 在表單被驗證並保存後,將顯示僅包含文件的第二個表單。 Trac bugtracker的工作方式是這樣的,在主窗體上有一個複選框,用於'我有要上傳的文件',並且如果選中該複選框,則將用戶轉到該窗體。

+0

謝謝Daniel。我沒有想到將文件發送回客戶端,但是我認爲 - 就像它與其他字段一樣 - 可能會發送和恢復路徑字符串。 – shanyu 2009-10-13 21:24:39

+0

+1 - 你可以做的另一件事是添加一個名爲「suspectIntendedFileUpload」的隱藏字段,你可以通過文件上傳來設置接收提交。如果您隨後使用該隱藏字段集進行了進一步提交,並且沒有文件上傳,您可以取消設置該字段並警告用戶。 – 2009-10-14 05:52:39

+0

@dominic - 偉大的提示,謝謝。 – shanyu 2009-10-14 14:51:42