2016-03-15 79 views
1

當用戶登錄時,我檢查它是否屬於一個特定的羣體,如果這是真的,我做一個重定向到指定的頁面,這裏是我的代碼apps.py:Django的信號重定向

def OperatorRedirect(sender, user, request, **kwargs): 
    from struttura_employee.models import EmployeeUser, EmployeeGroup 

    u = get_object_or_404(EmployeeUser,username=user.username) 
    groups = u.get_groups() 
    g = get_object_or_404(EmployeeGroup,long_name="Operatore") 
    if g in groups: 
     print("sei un operatore") 
     return HttpResponseRedirect(reverse('qrs_machine_panel:asset_choice', args=[])) 

class QrsofmanMachinePanelConfig(AppConfig): 
    name = 'qrsofman_machine_panel' 
    print("ciao") 
    user_logged_in.connect(OperatorRedirect) 

問題是HttpResponseRedirect被忽略 有什麼想法?

回答

5

這不是你可以在信號中做的事情。這些用於更新數據庫行或發送特定操作時發送電子郵件等內容。它們不能以任何方式影響響應,因爲這是由視圖管理的。

您的重定向代碼需要移入登錄視圖本身;請致電auth.login()後再進行檢查。

+0

除了Daniel提到的內容外,你還應該使用['user_passes_test'](https://docs.djangoproject.com/en/1.9/topics/auth/default/#limiting-access-to-logged-在你的登錄視圖中使用裝飾者(in-users-that-pass-a-test)裝飾者;否則用戶可以簡單地輸入受限制視圖的URL。 –

+0

謝謝你的回覆! – Skar3