2017-12-21 33 views
0

Django(2.0)Webサイトのログインをしようとしていますが、これまでのところ、既存のアカウントのログインが機能しています。私は組み込みのログイン機能を使用しています。Python/Django:無効なログインでエラーメッセージを表示するには?

無効なアカウントを入力すると、エラーメッセージが表示されます。たとえば、「無効なユーザー名またはパスワード!」です。しかし、私はこれについてどうやって行くのか分かりません。

現在、無効なアカウントを入力するとログインページが更新されます。どんな助けもありがとう!

login.htmlと

{% block title %}Login{% endblock %} 

{% block content %} 
    <h2>Login</h2> 
    <form method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <button type="submit">Login</button> 
    </form> 
{% endblock %} 

ログインビューテンプレートで

def login(request): 
    if request.method == 'POST': 
     form = AuthenticationForm(request.POST) 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=username, password=password) 

     if user is not None: 
      if user.is_active: 
       auth_login(request, user) 
       return redirect('index') 

    else: 
     form = AuthenticationForm() 
    return render(request, 'todo/login.html', {'form': form}) 

答えて

1

{% for message in messages %} 

        <div class="alert alert-success"> 
         <a class="close" href="#" data-dismiss="alert">×</a> 

         {{ message }} 

        </div> 
      {% endfor %} 

ビューで

from django.contrib import messages 

def login(request): 
    if request.method == 'POST': 
     form = AuthenticationForm(request.POST) 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=username, password=password) 

     if user is not None: 
      if user.is_active: 
       auth_login(request, user) 
       return redirect('index') 
     else: 
      messages.error(request,'username or password not correct') 
      return redirect('login') 

    else: 
     form = AuthenticationForm() 
    return render(request, 'todo/login.html', {'form': form}) 
+0

あなたは男です!どうもありがとうございます。 – SJ19

0

テンプレートに{{ form.as_p }}が既にあるので、Djangoはフォームエラーを表示します。

問題は、AuthenticationFormが最初の引数としてrequestを受け取ることです。次に、request.POSTから手動でデータを取得するのではなく、form.is_valid()を使用して、ユーザー名とパスワードが有効で、ユーザーがアクティブであるかどうかを確認できます。

def login(request): 
    if request.method == 'POST': 
     form = AuthenticationForm(request, request.POST) 
     if form.is_valid(): 
      auth_login(self.request, form.get_user()) 
      return redirect('index') 
    else: 
     form = AuthenticationForm(request) 
    return render(request, 'todo/login.html', {'form': form}) 

別のオプションではなく、あなた自身を書くのビルトインLoginViewを使用することです:

from django.contrib.auth import views as auth_views 

urlpatterns = [ 
    ... 
    path('accounts/login/', auth_views.LoginView.as_view(template_name='todo/login.html')), 
    ... 
] 

その後、あなたの設定でLOGIN_REDIRECT_URLを設定します。

LOGIN_REDIRECT_URL = 'index' 
0

あなたは自分のテンプレート内で追加する必要があります:

{% block title %}Login{% endblock %} 

{% block content %} 
<h2>Login</h2> 

{% if form.errors %} 
    <p>username or password not correct</p> 
{% endif %} 

<form method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <button type="submit">Login</button> 
</form> 
{% endblock %} 
関連する問題