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

그것은 잘못된 들여 쓰기 파이썬 코드 – 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. 
     ... 

주, 당신은 당신은 또한 (/ 변경, URL 및 템플릿을 다시 통과, 양식을 처리하기 위해 장고의 로그인 시스템을 사용할 수 있습니다, 자신의 로그인보기를 작성하지 않아도되는 당신을) 자신의 템플릿으로 대체 할 수 있습니다 :

URL을 :

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

그런 다음 /login/ 로그인 페이지가됩니다.

Django contrib 인증 모듈과 함께 작동 한 후에는 사용자 정의 HTML 로그인 양식으로 확장하십시오.

django.contrib.auth.views

+0

친절한 답변을 가져 주셔서 감사합니다. 그러나 로그인 한 후 사용자를 user_type을 기반으로 특정 페이지로 리디렉션하려고했습니다. 그래서, login_view에 user_type을 생성하고 그것을하려고합니다. 어떻게하면 my_views에서이 작업을 수행 할 수 있습니다. – vanam

+0

첫 번째 예제를 사용할 때 사용자 variabele에 액세스 할 수 있으므로 리디렉션을 설정할 수 있습니다. 두 번째 접근법을 사용할 때; 신호로 처리하거나 집으로 구성된보기에서 리디렉션을 트리거 할 수 있습니다. – acidjunk