2016-03-15 75 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