2017-03-18 64 views
0

我想從重新輸入密碼鏈接時按我的登錄表單獲取用戶名。如何從登錄表單中獲取用戶名,當重新設置密碼鏈接被點擊時django

view.py

DEF ResetPassword(請求):

if request.method == 'POST': 
    username = request.Post.get['login_username'] 
    if username: 
     #send password reset link via email 
    else: 
     #if username is empty search for your account 
     return render(request, 'accounts/forms/email_search.html',{}) 

forms.html

<form class="navbar-form navbar" method="POST"action="{% url 'login' %}"> 
     {% csrf_token %} 

     <div class="form-group"> 
      {{ form.login_username }} 
     </div> 
     <div class="form-group"> 
      {{ form.login_password }} 
     </div> 
     <button type="submit" id="loginBtn" class="btn btn-default">Submit</button> 
     <br> 
     <a href="{% url 'ResetPassword' %}">Reset Password</a> 
     </form> 

回答

0

首先,請求對象未屬性Post,但POST

所以,它應該是

# use this if you're sure that login_username will always be passed 
`username = request.POST['login_username']` 

# use this and in case login_username fails, then an empty string is returned 
`username = request.POST.get('login_username', '')`. 

現在,你的問題。該表單僅提供login視圖的提交輸入。 change password按鈕只是一個簡單的鏈接。因此,當你點擊它時,你會向ResetPassword視圖發出GET請求(順便說一下,你應該將它重命名爲reset_password,這是Python的方式),沒有任何參數傳遞。

要解決此問題,您必須從表單中刪除此鏈接。 然後你必須爲ResetPassword視圖創建模板,比如說reset_password.html,並在那裏創建另一個表單(只需要username字段)即將POSTResetPassword查看。

例如:

<!-- reset_password.html --> 

<form class="navbar-form navbar" method="POST" action="{% url 'ResetPassword' %}">{% csrf_token %} 
    <div class="form-group"> 
     <input type="text" name="login_username" required /> 
    </div> 
    <button type="submit" id="reset-pwd-btn" class="btn btn-default">Reset Password</button> 
</form> 

而且最後:

# ResetPassword.py  

def ResetPassword(request): 
    if request.method == 'POST': 
     # login_username is the same as the input's name 
     username = request.POST.get('login_username') 
     if username: 
      # send password reset link via email 
     else: 
      # if username is empty search for your account 
     return render(request, 'accounts/forms/email_search.html', {}) 
    return render(request, 'accounts/forms/reset_password.html', {}) 
+0

如果我使用第一個選項我得到這個錯誤MultiValueDictKeyErro,如果我使用第二個選項返回None – thomaSmith

+0

我想你的編輯和它仍然沒有返回 – thomaSmith

+0

更新了我的答案。雖然有幾個修改你必須做,以便工作!但容易,但! –

相關問題