一個簡單的django user.is_authenticated問題


Q1:這是我一個view函數:

def user_info(request):
    response=HttpResponse()
    user=request.user
    user_id=user.id
    if user.is_authenticated():
        is_login=1
    else:
        is_login=0
    response.write('{"is_login":%s}' % str(is_login))
    return response

雖然用戶已經登陸,但是返回的is_login總是0,也就是沒有登陸,這么簡單的一個函數,為什么會出錯?

 

A1:

如果你使用is_authenticated()判斷用戶是否登錄,那么意味着你采用了django的auth系統,
那么你的登陸最好使用django.contrib.auth中的login方法,
該方法會為將user_id以及user_backend放入session中存儲,
.is_authenticated()通過判斷session中是否有user_id 以及user_backend 來判斷用戶是否登陸。
如果,采用自己的登陸方法,那么有可能沒將user_id 或者user_backend 放入session中保存。
所以你的user被django認為沒有登錄,雖然你已經登陸了。
最好的辦法是利用django自己的登陸方法,結合該方法,判斷用戶是否登陸,從而決定用戶的行為。

A2:

如果你要用is_authenticated()來判斷用戶是否登錄,那么登錄你也得用django.contrib.auth來處理登錄、登出和權限驗證,你可以再看看admin那一章

我自己寫的話,我一般在session中加標示,后面的請求每次過來都驗證一下session,即可判斷登錄狀態,session也比較好控制過期時長。

def VerifyLogin(request):
    try:
        if request.session['userid']:
            return True
    except:
        return False
 
def gotologin(request):
    string = '登錄信息已過期,請重新登錄'
    return render_to_response('gotologin.html',{'string':string})

下面處理請求的方法中,調一下VerifyLogin函數就可以驗證狀態

if request.session['userid']:

    ....

esle:

    ....

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM