2

私は2つの異なるタイプのユーザー、すなわちトラック&を作成しました。ここでは、ユーザーの登録ページですenter image description hereユーザーを認証する方法

登録後、ユーザーがトラックか会社かを示すデータがデータベースに送られます。私のログインページで

LoginPage

のみメールとパスワードを入力する必要があります。私のカスタムユーザー作成フォームで、username = emailフィールドを追加しました。

有効な資格情報でログインしようとしているとき、そのページはユーザータイプに応じて特定のページにリダイレクトされません。代わりに、login.htmlの無効な資格情報のために作成したエラーが発生しています - 「あなたのメールアドレスとパスワードが一致しませんでした。もう一度やり直してください。

は、ここに私のコードです:

views.py:

def login_view(request): 
title = "Login" 

if request.method == 'POST': 

    form = LoginForm(data=request.POST) 
    email = request.POST.get('email', '') 
    password = request.POST.get('password', '') 
    user = auth.authenticate(username=email, password=password) 
    if form.is_valid(): 
     auth.login(request, user) 
     user_type = form.cleaned_data['Label'] 
     if user.is_active & user_type == 'Truck': 
      return HttpResponseRedirect('/post_load/') 
     elif user_type == 'Company': 
      return HttpResponseRedirect('/live_deal/') 
else: 
    form = LoginForm() 

return render(request, 'registration/login.html', {'form' : form, 'title': title}) 

urls.py:

# url(r'^login/$', views.login_view), 
# url(r'^accounts/login/$', views.login_view), 
url(r'^login/$', 'django.contrib.auth.views.login', {'authentication_form': LoginForm}), 
url(r'^accounts/login/$', 'django.contrib.auth.views.login', {'authentication_form': LoginForm}), 

forms.py:

class LoginForm(auth.forms.AuthenticationForm): 

email = forms.EmailField(label=_("Email"),widget=forms.EmailInput) 
CHOICES= (('Truck', 'Truck'),('Company', 'Company'),) 
Label = forms.ChoiceField(choices=CHOICES, label='Label', widget=forms.RadioSelect()) 

login.htmlと:

{%extends "registration/header.html"%} 
{% block content %} 
{% if form.errors %} 
<p>Your email and password didn't match. Please try again.</p> 
{% endif %} 

<form class="form-horizontal" method="post" action = "." >{%csrf_token%} 
<div class="panel panel-default login"> 
     <div class="panel-heading"> 
      <span class="glyphicon glyphicon-lock"></span> Login</div> 
     <div class="panel-body"> 
      <form class="form-horizontal" role="form"> 
      <div class="form-group"> 
       <div class='col-sm-6 col-sm-offset-4'> 
       <table border="0"> 
       <div class="col-sm-4"> 

    <tr><th><label for="id_user" class="col-sm-4 control-label">Email:</label></th><td>{{ form.email }}</td></tr> </div> 
    <div class="col-sm-4"> 



    <tr><th><label for="id_password" class="col-sm-4 control-label">Password:</label></th><td>{{ form.password }}</td></tr> </div> 

</table> </div> 
       </div> 
      </div> 
      <div class="form-group"> 
       <div class="col-sm-offset-4 col-sm-8"> 
        <div class="checkbox"> 
         <label> 
          <input type="checkbox"/> 
          Remember me 
         </label> 
        </div> 
       </div> 
      </div> 
      <div class="form-group last"> 
       <div class="col-sm-offset-4 col-sm-8"> 
        <button type="submit" class="btn btn-success btn-sm"> 
         Sign in</button> 
        <input type="hidden" name="next" value="/" /> 
         <label class="col-sm-offset-3"> 
       <a href="#">Forget Password? </a> 
      </label> 
       </div> 
      </div> 
      </form> 
     </div> 
     <div class="panel-footer"> 
      Not Registered? <a href="/register/">Register</a></div> 

</div> 
</form> 
{% endblock %} 
+0

それは間違ったインデントのpythonコード – acidjunk

+0

を読むために、私は簡単に記述することによって、自分のコードについての情報を提供する必要があり、非常に困難ですか! – vanam

答えて

0
{% if form.errors %} 
<p>Your email and password didn't match. Please try again.</p> 

このエラーはかなり広範囲です。ループして実際のエラーを確認することができます。

さらに良いですが、独自の認証システムを使用しないでください.Djangoの組み込みシステムを使用するだけで、ユーザモデルに余分なフィールドを追加することもできます。

例:

from django.contrib.auth import authenticate, login 

def my_view(request): 
    username = request.POST['username'] 
    password = request.POST['password'] 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      # Redirect to a success page. 
     else: 
      # Return a 'disabled account' error message 
      ... 
    else: 
     # Return an 'invalid login' error message. 
     ... 

注意、あなたがあなた自身のログインビューを記述する必要はありません、あなたはまた、リセット/変更を渡し、フォームを処理するために、Djangoのログインシステムを使用することができ、URLやテンプレート(あなた)独自のテンプレートを上書きすることができます:

のURL:

urlpatterns = [ 
    url('^', include('django.contrib.auth.urls')), 
] 

その後/login/は、ログインページになります。

Django contrib authモジュールで動作した後、独自のカスタムHTMLログインフォームで拡張します。

django.contrib.auth.views

+0

親切な答えをありがとう。しかし、ログインした後は、user_typeに基づいてユーザーを特定のページにリダイレクトしたいと思っていました。ですから、私はlogin_viewにuser_typeを作成してそれをしようとしています。どのように私はmy_viewsでこれを行うことができます。 – vanam

+0

最初の例を使用すると、ユーザーのvariabeleにアクセスできるため、リダイレクトを設定できます。第2のアプローチを使用する場合。あなたは信号でそれを行うことができます、または家に設定したビューからのリダイレクトを引き起こすことができます。 – acidjunk

関連する問題