from rest_framework import viewsets from rest_framework.decorators import action from rest_framework.response import Response from apps.jqr.parsers import WechatContentParser from apps.jqr.renderers import WechatPublicContentRenderer from apps.jqr.serializers import WechatPublicTokenSerializer, WechatEncryptSerializer class WechatWorkerViewSet(viewsets.GenericViewSet): @action(methods=['GET'], detail=False, serializer_class=WechatPublicTokenSerializer, url_path=r'event/(?P\w+)',) def verify(self, request, path, *args, **kwargs): [business, corpid, agentid, uid] = path.split('_') serializer = self.get_serializer(data=request.query_params) serializer.is_valid(raise_exception=True) enchostr = serializer.data.get('echostr') return Response(data=int(enchostr)) @verify.mapping.post def message(self, request): serializer = WechatEncryptSerializer(data=request.data) serializer.is_valid(raise_exception=True) return Response(data=serializer.data) def get_parsers(self): if self.request.method == 'POST': return [WechatContentParser()] return super().get_parsers() def get_renderers(self): if self.request.method == 'POST': return [WechatPublicContentRenderer()] return super().get_renderers()