Получить IP-адрес на Django-каналах - на обработчике получения

Мы получаем IP-адрес клиента веб-сокета как message.content["client"] в connect обработчик. но этот код не работает в receive обработчик. Есть ли способ получить IP-адрес клиента в receive обработчик?

Редактировать:

В 'dphane/ws_protocol.py', в классе WebSocketProtocol Я вижу это в onconnectкод

        self.request_info = {
            "path": self.unquote(self.path),
            "headers": self.clean_headers,
            "query_string": self._raw_query_string,  # Passed by HTTP protocol
            "client": self.client_addr,
            "server": self.server_addr,
            "reply_channel": self.reply_channel,
            "order": 0,
        }

        ...
        ...

        self.channel_layer.send("websocket.connect", self.request_info)

где как в onmessageкод

        if isBinary:
            self.channel_layer.send("websocket.receive", {
                "reply_channel": self.reply_channel,
                "path": self.unquote(self.path),
                "order": self.packets_received,
                "bytes": payload,
            })
        else:
            self.channel_layer.send("websocket.receive", {
                "reply_channel": self.reply_channel,
                "path": self.unquote(self.path),
                "order": self.packets_received,
                "text": payload.decode("utf8"),
            })

Мы не получаем клиентский IP, потому что Dphane не дает эту информацию в message обработчик.

Есть ли способ кроме наследования класса WebSocketProtocol и переопределения onmessage

2 ответа

Вы можете исправить это, используя request.META['REMOTE_ADDR']

Не уверен, что это все еще проблема, но вы должны посмотреть на получение message.content["client"] в сеансе. Таким образом, когда вы получаете ваше сообщение, вы можете получить IP в сеансе.

Другие вопросы по тегам