2010-09-02 26 views
2

我已經使用UserProfile方法擴展了用戶模型。不過,我在運行查詢request.user.get_profile()Django - 如果UserProfile匹配查詢不存在,則重定向到登錄頁面錯誤

我認爲,當我已成爲退出的制度,使我的用戶成爲AnonymousUser發生這種情況時,偶爾會Django的錯誤信息UserProfile matching query does not exist。如果UserProfile不存在,是否有任何方法可以自動將用戶重定向回登錄頁面。

我在相當多的地方使用request.user.get_profile(),所以真的不想通過我的代碼把檢查放在每個人身上,所以想着使用信號或類似的方式,我只需要做一次。

另外我在我的函數調用中使用@login_required,但這似乎並沒有在用戶得到這個錯誤之前重定向。

每個註冊用戶都應該有一個UserProfile帳戶,因爲如果他們登錄到系統中時沒有用戶帳戶,它將自動創建。

我也使用Django 1.1

回答

0

所以是使用信號或類似的東西,我只能做一次的方式思考。

AFAIK你不能用信號做到這一點。

然而,您可以創建一個自定義裝飾器來替換login_required。這個裝飾者可以包裝login_required並檢查用戶配置文件。然後,您可以在導入語句中用您自己的替換Django的login_required

+0

我不熟悉自定義裝飾。你能給我一個如何做到這一點的例子嗎? – John 2010-09-02 08:59:21

0

@login_required修飾器確保用戶已登錄。可能發生此錯誤的原因是某些用戶記錄沒有UserProfile。您可以在外殼

from django.contrib.auth.models import * 
for u in User.objects.all(): 
    try: 
     u.get_profile() 
    except: 
     print "%s does not have a profile" % u 
2

測試這個應該工作

def profile_required(): 
    def has_profile(user): 
     try: 
      user.get_profile() 
     except: 
      return False 
     else: 
      return True 
    return user_passes_test(lambda u: has_profile(u)) 
相關問題