Как передать запрос по каналам Django WebSocket и вызвать Django view

Я работаю над одностраничным приложением с Django и хотел бы использовать WebSockets и, следовательно, каналы. Чтобы не усложнять, я думаю, что хочу обрабатывать всю связь с сервером только через WebSocket, а не добавлять XHR (XML HTTP Request) в микс. Я использую каналы с самого начала, так как много данных будет передаваться с сервера на клиент асинхронно.

В обычном Django обычный запрос к https://example.com/login или https://example.com/logout или что-то еще, и URL-маршрутизатор Django решит, в какое представление его отправить. Вместо этого я хотел бы, чтобы пользователь выполнял свое действие в клиенте, обрабатывал его с помощью Javascript и использовал WebSocket для отправки запроса на сервер. Поскольку я использую Django-allauth, я хотел бы использовать предоставленные представления Django для обработки таких вещей, как аутентификация. Затем сервер обновит клиенту необходимую информацию о состоянии из представления.

Мой вопрос: как я могу обработать данные, полученные через WebSocket, и отправить HTTP-запрос в представление Django? Затем мой потребитель каналов берет обработанный HTML-код и отправляет его клиенту для обновления страницы или раздела.

Я могу представить себе, что произойдет с использованием XHR, но я стараюсь избегать их смешивания, если только кто-нибудь не укажет на полезность использования XHR плюс WebSockets ...? Я полагаю, что другой вариант - использовать XHR для аутентификации и других запросов, инициированных клиентом, и использовать WebSocket для асинхронного обновления клиента. Есть ли в этом хоть какой-то смысл?

Обновление: мне приходит в голову, что я мог бы использовать requests из PyPi и сделать sync_to_async вызов localhost, используя учетные данные, полученные через WebSocket. Однако для этого мне потребуется обработать данные сеанса и отправить их обратно клиенту. Похоже, это намного больше работы. Тем не менее, я мог поддерживать сами сеансы на сервере и просто связывать их с самим соединением WebSocket. Поскольку я использую безопасный WebSocket, wss:// есть ли возможность взлома соединения WebSocket?


person Brian    schedule 20.07.2019    source источник


Ответы (1)


Ознакомьтесь с этим проектом, который дает возможность обрабатывать запросы веб-сокетов каналов с использованием представлений Django Rest Framework. Вы можете попробовать адаптировать его к обычному представлению Django.

person Ken4scholars    schedule 28.07.2019