2017-02-24 23 views
0

我最近試圖開發一個使用Django的網站,其中一個人可以在系統中進行他/她的註冊,但是他/她不應該被允許在管理員批准請求之前登錄系統。我嘗試了user.is_active字段,但它唯一做的是阻止新用戶以管理員身份訪問。換句話說,系統允許他/她登錄系統。我的代碼如下:Django:不允許新創建的用戶登錄,直到他/她被管理員批准爲止。

# create a new user but he will be inactive until admin's approval 
user = User.objects.create_user(username=username, password=password) 
user.is_active = False 

改變用戶的IS_ACTIVE領域爲False我嘗試使用新的用戶的用戶名和密碼登錄系統並在系統中讓我後,這是我的代碼登錄:

def login(request): 
    context = RequestContext(request) 
    username = request.POST.get('username', '') 
    password = request.POST.get('password', '') 
    user = auth.authenticate(username = username, password = password) 

    if user is not None and request.user.is_active: 
     auth.login(request, user) 
     print 'login' 
     print request.user.username 
     print request.user.is_active 
     return redirect('app.views.results') 

    else: 
     print 'no login' 
     return render(request, 'login.html') 

當我打印用戶的用戶名和is_active字段時,我看到「is_active」字段是True而不是False。代碼有問題,或者我錯過了什麼? 解決問題的任何更好的方法也將受到歡迎和讚賞。

+0

你確定你保存IS_ACTIVE設置爲false後的用戶? –

+0

另請注意,用戶將不會在request.user中,直到*調用auth.login之後;你應該檢查'user.is_active'。 –

+0

謝謝@DanielRoseman問題是我沒有保存用戶。是的,你提到的有關用戶的第二件事,而不是request.user也是正確的。我解決了這個問題,它似乎工作正常。 – TheoPsal

回答

0

執行完的模型對象的屬性值分配,你應該叫object.save(),像這樣:

user = User.objects.create_user(username=username, password=password) 
user.is_active = False 
user.save() 

這將節省你介紹對象的變化。

Django docs

+1

只需將該字段傳遞給'create_user',您將節省2行和1分貝查詢:'User.objects.create_user(username = username,password = password,is_active = False)' – spectras

+0

感謝您的評論。這顯然是一個更好的解決方案。 – TheoPsal

相關問題