Пользовательское действие Djangochannelsrestframework не работает
Я хочу создать пользовательское действие, как в документации, но он отвечает, что метод не позволяет
Документация: https://pypi.org/project/djangochannelsrestframework/.
Блок "Добавление пользовательских действий"
другие веб-сокеты работали корректно
Мой исходный код:
consumers.py:
from games.models import GameLaunchers, GamesCategories, Games, Tournires
from news.models import News
from games.serializers import GamesCategoriesSerializer, GameLaunchersSerializer, GameSerializer, TourniresSerializer
from news.serializers import NewsListSerializer
from market.models import MarketCategory, MarketProductsType, MarketProducts, MarketOrders
from market.serializers import MarketCategoriesSerializer, MarketProductsTypeSerializer, MarketProductsSerializer, MarketOrdersListSerializer
from django.core import serializers
from djangochannelsrestframework.settings import api_settings
from django.http import Http404
from djangochannelsrestframework.generics import GenericAsyncAPIConsumer
from djangochannelsrestframework.consumers import AsyncAPIConsumer
from djangochannelsrestframework.decorators import action
from djangochannelsrestframework.mixins import (
ListModelMixin,
RetrieveModelMixin,
PatchModelMixin,
UpdateModelMixin,
CreateModelMixin,
DeleteModelMixin,
PaginatedModelListMixin
)
class GamesLaunchersAddConsumer(
CreateModelMixin,
GenericAsyncAPIConsumer,
):
serializer_class = GameLaunchersSerializer
class GameLaunchersConsumers(GenericAsyncAPIConsumer):
queryset = GameLaunchers.objects.all()
serializer_class = GameLaunchersSerializer
@action
async def send_email(self, request_id, some=None, **kwargs):
# do something async
return {'response_with': 'some message'}, 200
routing.py
from django.urls import path
from socketapp import consumers
# from socketapp.views import GamesViewSet
from django.urls import re_path
from djangochannelsrestframework.consumers import view_as_consumer
# from djangochannelsrestframework.consumers import view_as_consumer
# from games.views import GameLaunchersAddView, GameLaunchersView
websocket_urlpatterns = [
re_path(r'ws/games/launchers/add',
consumers.GamesLaunchersAddConsumer.as_asgi()),
re_path(r'ws/games/launchers', consumers.GameLaunchersConsumers.as_asgi()),
]
Отправка сообщения:
{
"action": "send_email",
"request_id": 42,
"some": "value passed as keyword argument to action"
}
Я получил эту ошибку:
{
"errors": [
"Method \"send_email\" not allowed."
],
"data": null,
"action": "send_email",
"response_status": 405,
"request_id": 42
}
Измените это
{ "action": "send_email", "request_id": 42, "some": "значение, переданное в качестве аргумента ключевого слова в действие" }
к этому
{ действие: "send_email", request_id: 42, some: "значение, переданное в качестве аргумента ключевого слова действию" }