-1

Django를 사용하는 & 회사의 두 가지 유형의 사용자를 만들었습니다. 다음은 사용자의 등록 페이지입니다. Registration Page장고에 로그인 한 후 다른 사용자를 위해 다른 유형의 페이지를 리디렉션하는 방법

등록한 사용자가 트럭인지 회사인지에 대한 데이터는 데이터베이스로 이동합니다.

내 로그인 페이지에서 Login Page 이메일 ID와 비밀번호 만 입력해야합니다.

고유 한 EmailID를 가진 사용자가 사용자 유형에 따라 유효한 페이지로 어떻게 리디렉션되는지 알고 싶습니다.

가정, 인증 및 POST 요청 (views.py)에서 데이터를 내 로그인 페이지로 가져 오는 것이 올바르게 작동하지 않는다고 가정합니다. 제발, 누군가 이걸 고쳐 주도록 도와주세요.

views.py :

@csrf_protect 
def login_view(request): 
    title = "Login" 
    if request.method == 'POST': 
    email = request.POST.get('email', '') 
    password = request.POST.get('password', '') 
    user = auth.authenticate(username=email, password=password) 
    form = LoginForm(data=request.POST) 
    if form.is_valid(): 
     user_type = form.cleaned_data['Label'] 
     if 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/$', '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 :

여기

내 코드입니다몇 가지를

user_type = form.cleaned_data['Label'] 
if user_type == 'truck': 
    # send the user to truck page 
else: 
    # send the user to company page 

- - 당신이 is_valid 사용하여 유효성을 검사하면 당신은 정말 깨끗한() 메서드를 호출 할 필요가 없습니다 :

{%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

여기에 귀하의 의견에 그 라디오 필드를 확인하기 위해 더 나은 방법() 그리고 그 POST 섹션 안에 그 authenticate() 것을 옮겨야합니다.

+0

@CODEkid를 제안하면서 코드를 편집했습니다. 그러나 등록 페이지를 사용하여 만든 유효한 자격 증명으로 로깅 할 때 인증이 작동하지 않습니다. "귀하의 이메일과 비밀번호가 일치하지 않습니다. 다시 시도하십시오."라는 오류 메시지가 나타납니다. 사용자 정보가 유효하지 않은 경우 login.html에서 작성했습니다. – vanam

+0

authenticate() 메서드를 재정의 했습니까? 'username'과 'password'를 kwargs로 사용합니다. – CODEkid

+0

저는 장고 형제를 처음 접했습니다. 나는 내가 원하는 모든 것을 붙여 넣기 만하고있다. 이 문제를 해결하도록 도와주세요. 그리고 나는 username 필드 = 'email'처럼 내 customuser 생성 폼에 authenticate method()를 오버라이드했다. – vanam