Django表示不对工作人员起作用

时间:2018-04-16 13:56:56

标签: python django django-signals django-channels django-guardian

我有使用websocket实现的django(1.9)应用程序。为了实现websocket我使用Django通道(1.1.8)。我的模型属于ACL,由Django-guardian(1.4.4)管理。

每次名为“My_model”的模型时,我都会通过websocket发送消息 已创建,更改或删除。但我的挑战是模型在ACL下,这意味着当且仅当此用户可以查看模型实例时,用户才能通过websocket接收消息。 这意味着我必须在我的信号处理程序中拥有用户实例,以便在发送消息之前验证websocket用户是否有烫发。

您可以在下方看到我的实施情况。它适用于开发环境,但不适用于生产环境。区别在于生产时,websocket处理程序在Django worker和Daphne服务器下运行。

在文件my_app / consumers / my_model_consumer.py中:

class MyModelConsumer(WebsocketConsumer):
    http_user_and_session = True

    # the connect method is triggered when an user is connecting through the websocket
    # It register signals handlers which receive the connected user as argument
    def connect(self, message, **kwargs):
       user = message.user
       group = "my_model_Notifications-{}".format(user.id)

       Group(group).add(message.reply_channel)

       post_save.connect(partial(notify_my_model_change, user=user, group=group), My_model, weak=False, dispatch_uid= uuid.uuid4())
       post_delete.connect(partial(notify_request_delete, user=user, group=group), My_model, weak=False, dispatch_uid= uuid.uuid4())

       self.message.reply_channel.send({"accept": True})

def notify_my_model_change(sender, **kwargs):
    user = kwargs['user']
    instance = kwargs['instance'] 
    if user.has_perm('view_my_model', instance):
        Group(group).send({"text": "My_model changed"})

有人知道什么是错误导致它无法在生产环境中工作吗?

0 个答案:

没有答案