2017-09-22 65 views
0

我對Python和Django非常陌生,正在查看使用Django內置登錄系統(django.contrib.auth.login)的代碼。如何從django.contrib.auth(Django內置登錄系統)獲取用戶名?

用戶登錄後,我想根據用戶權限將用戶重定向到適當的URL。例如,某些用戶名擁有管理員權限,而有些則只是普通用戶。但是,點擊「登錄」按鈕後,用戶總是被重定向到相同的URL。

爲了以不同方式重定向用戶,我必須檢查用戶名,並檢查用戶具有的權限。但是,我找不到任何方法從django.contrib.auth.login中獲取用戶名。就好像用戶名在驗證通過後就消失了一樣。

有誰知道如何解決這個問題?

謝謝!

+0

你應該告訴你正在使用的代碼,並指出其中的用戶名「消失」。 –

+0

經過身份驗證的用戶存儲在請求對象中的'用戶'屬性下。如果您使用基於類的視圖,則可以在視圖中使用'request.user'或'self.request.user'來檢索它。這很好地解釋了[在文檔中](https://docs.djangoproject.com/en/1.11/topics/auth/default/#authentication-in-web-requests)。 – Antwane

+0

[此問題](https://stackoverflow.com/questions/16824004/django-conditional-login-redirect/16824337#16824337)可能會有所幫助。 – Alasdair

回答

0

好吧,如果你能夠登錄他,你應該有類似的東西(在此部分代碼):

0

登錄視圖支持「下一個」參數。因此,在您的表單模板,你可以這樣添加:

<form method="POST"> 
    {% csrf_token %} 
    <input type="hidden" name="next" value="/go/here/if/successful" /> 
    {{ form }} 
</form> 

要做到這一點的看法,同時尊重下一個參數,並提供根據用戶不同的默認值:

from django.contrib.auth.views import LoginView 

class MyLoginView(LoginView): 
    def get_redirect_url(self): 
     next = super(MyLoginView, self).get_redirect_url() 
     if not next: 
      user = self.request.user # see form_valid and auth.login() 
      if user.is_staff: 
       return '/staff/goes/here' 

     return next 
0

在登錄模板有的喜歡:

<form action="/login/" method="post"> 
    <input type="text" name="username" placeholder="username"/> 
    <input type="password" name="password" placeholder="password"/> 
</form> 

而且在像django docs後臺說:

from django.contrib.auth import authenticate 
user = authenticate(username='john', password='secret') 
if user is not None: 
    # A backend authenticated the credentials 
else: 
    # No backend authenticated the credentials 
0

您可以使用視圖和綁定網址下面的代碼索引功能

from django.shortcuts import render 

def index(request): 
    if request.user.is_admin and request.user.is_active: 
     return render(request, 'admin-page.html') 
    return render(request, 'user-page.html') 
相關問題