2017-03-18 5 views
0

パスワードのリセットリンクを押したときに、ログインフォームからユーザー名を取得しようとしています。リセットパスワードのリンクをクリックすると、ログインフォームからユーザー名を取得する方法django

view.py

デフ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',{}) 

<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

forms.htmlまず、requestオブジェクトが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ボタンは単純なリンクです。したがって、それをクリックするとGETの要求がResetPasswordビューになります(ところで、それを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を取得する最初のオプションを使用する場合、私は2番目のオプションを使用する場合、それは私はあなたの編集を試してみました – thomaSmith

+0

Noneを返しますし、まだ返されていません – thomaSmith

+0

私の答えを更新しました。あなたは仕事をするためにそれを行う必要があるいくつかの変更がありますが、!しかし、簡単だけど! –

関連する問題