Re: [問題] Django POST部份資料呈現在redirect page

看板Python作者 (wakaka)時間11年前 (2014/11/22 06:44), 11年前編輯推噓0(001)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《uranusjr (←這人是超級笨蛋)》之銘言: : : 我可以想到四種做法,都有各自的優缺點: : : 1. 直接 POST 到你要跳轉的那頁 : : 山不轉路轉,不要 redirect 問題就沒了。HTML form 的 action 參數可以控制 : POST 目標。或者是你乾脆讓 POST 的結果就顯示使用者資訊就好。反正不要跳轉 : 就沒事。 : : 優點:超簡單。 : 缺點:如果你有其他狀況需要註冊後「不」顯示這個頁面,就會比較麻煩。 : 另外就是使用者無法 refresh 這個頁面(因為不是 idempotent)。 : : 推 walelile: 非常感謝uranusjr大的分析,初次接觸,受益良多 11/21 14:32 : → walelile: 我應該會先用GET來做,session我要研究一下怎麼用 11/21 14:40 : 推 Seudo: 為什麼不直接用 render(request, 'profile.html') @@? 11/21 21:11 : → Seudo: profile.html {{request.user.XXXX}} 11/21 21:12 : → walelile: 我從tutorial裏面看到說要做redirect來避免重複submit 11/21 22:20 : → uranusjr: @Seudo 註冊完又不見得有登入... 11/21 23:14 我原本程式HttpResponseRedirect的流程是 click "reg" link --> GET /accout/reg/ --> Submit --> POST /account/reg/ 302 --> GET /accout/reg_success/ 200 我換上Seudo說的方法後變成 click "reg" link --> GET /accout/reg/ --> Submit --> POST /account/reg/ 200 改變的是POST後,render的頁面從reg.html換成reg_success.html。如果refresh這個 頁面,FireFox 34.0會顯示"必須重新送一次資料才能顯示網頁,會重做一次所有事情 (如線上購物)",然後把我送回原本GET 看到的 reg.html頁面,顯示我之前輸入過的帳 號和email,但是密碼欄位被清空了。我不確定自動清空密碼欄位是誰造成的影響= =.. 另外一點是,我如果render(request, '/accout/reg_success.html', {'user':user}) 會讓剛註冊完的使用者彷彿已登入,但實際上我換到不同page並沒有維持登入的狀態。 這問題應該是因為我回傳的名字是'user',如果換成'xuser'或只回傳'user.username' 就不會有問題。感覺這與uranusjr大所提到的POST的方法類似,只是這是POST到 同一個View但render不同的template。 如果POST到我要跳轉的view, click "reg" -> GET /accout/reg/ -> Submit -> POST /account/reg_success/ 200 有一個問題是,我是在接收到POST後做form.is_valid()的檢查,False則回傳 render(request, 'user/reg.html', {'reg_form': form })。問題在於,這樣做會把 錯誤的訊息跟原有的表格資料顯示在/accout/reg_success/,而非/account/reg/。 且在refresh後會與直接render不同template有同樣的狀況, ※ 編輯: walelile (61.230.158.213), 11/22/2014 06:47:51

11/23 16:45, , 1F
試試Form wizard(?)
11/23 16:45, 1F
文章代碼(AID): #1KRy1Pzt (Python)
文章代碼(AID): #1KRy1Pzt (Python)