-1

重定向 - 卡車&公司使用Django。下面是一個用戶Registration Page如何不同類型的針對不同用戶的網頁登錄後,我已經創建了兩個不同類型的用戶的Django

註冊後我的註冊頁面,關於用戶是否是卡車或公司的數據將進入數據庫。

在我的登錄頁面,Login Page只有EMAILID和密碼將被輸入。

我想知道如何與獨特的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:

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

這裏有一個更好的方法來檢查你的觀點,即射頻場: -

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 (),你應該在該POST部分中移動authenticate()事物。

+0

我編輯的代碼,如你所說@CODEkid。 但是,當我使用我的註冊頁面創建的有效憑證進行日誌記錄時,驗證不起作用。它引發錯誤「您的電子郵件和密碼不匹配,請重試。」如果用戶的詳細信息無效,我已在我的login.html中創建了這些內容。 – vanam

+0

你重寫了authenticate()方法嗎?它需要'用戶名'和'密碼'作爲kwargs。 – CODEkid

+0

我是Django bro的新手。我只是複製粘貼我想要的一切。你能幫我解決這個問題嗎?我已經重寫了我的自定義用戶創建窗體中的身份驗證方法(),因爲用戶名字段='email' – vanam

相關問題