Re: [問題] Django POST部份資料呈現在redirect page
※ 引述《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
11/23 16:45, 1F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章