import json from rest_framework.views import APIView from rest_framework.permissions import IsAdminUser from rest_framework.response import Response from rest_framework.serializers import Serializer from rest_framework.decorators import action from apps.develop.serializers import GenerateVoiceSerializer, SendSmsSerializer, TestTaskSerializer from apps.develop.tasks import backup_database, backup_media, get_wx_token, reload_web_git, reload_server_git, reload_server_only from rest_framework.exceptions import APIException, ParseError from apps.system.models import User from apps.system.tasks import show from apps.utils.sms import send_sms from apps.utils.speech import generate_voice from django.core.cache import cache import requests from apps.utils.viewsets import CustomGenericViewSet # Create your views here. class ReloadServerGit(APIView): authentication_classes = [] permission_classes = [] def post(self, request): """ 拉取后端代码并重启服务 拉取后端代码并重启服务 """ reload_server_git.delay() return Response() # if completed.returncode == 0: # return Response() # else: # from server.settings import myLogger # myLogger.error(completed) # raise ParseError(completed.stderr) class ReloadClientGit(APIView): authentication_classes = [] permission_classes = [] def post(self, request): """ 拉取前端代码并打包 拉取前端代码并打包 """ reload_web_git.delay() return Response() # completed = reload_web_git() # if completed.returncode == 0: # return Response() # else: # raise APIException(completed.stdout) class ReloadServerOnly(APIView): permission_classes = [IsAdminUser] def post(self, request): """ 仅重启服务 仅重启服务 """ completed = reload_server_only() if completed.returncode == 0: return Response() else: raise APIException(completed.stdout) class BackupDatabase(APIView): permission_classes = [IsAdminUser] def post(self, request): """ 备份数据库到指定位置 备份数据库到指定位置 """ completed = backup_database() if completed.returncode == 0: return Response() else: raise APIException(completed.stdout) class BackupMedia(APIView): permission_classes = [IsAdminUser] def post(self, request): """ 备份资源到指定位置 备份资源到指定位置 """ completed = backup_media() if completed.returncode == 0: return Response() else: raise APIException(completed.stdout) class TestViewSet(CustomGenericViewSet): authentication_classes = () permission_classes = () @action(methods=['post'], detail=False, serializer_class=SendSmsSerializer) def send_sms(self, request, pk=None): """发送短信测试 发送短信测试 """ serializer = SendSmsSerializer(data=request.data) serializer.is_valid(raise_exception=True) vdata = serializer.validated_data res = send_sms(**vdata) return Response(res) @action(methods=['post'], detail=False, serializer_class=GenerateVoiceSerializer) def generate_voice(self, request, pk=None): """文字转语音测试 文字转语音测试 """ serializer = GenerateVoiceSerializer(data=request.data) serializer.is_valid(raise_exception=True) vdata = serializer.validated_data res = generate_voice(**vdata) return Response(res) @action(methods=['post'], detail=False, serializer_class=TestTaskSerializer) def task(self, request, pk=None): """任务派发测试 任务派发测试 """ serializer = TestTaskSerializer(data=request.data) serializer.is_valid(raise_exception=True) vdata = serializer.validated_data ret = {} task = show.delay(*vdata.get('args', []), **vdata.get('kwargs', {})) ret['task_id'] = task.task_id return Response(ret) @action(methods=['post'], detail=False, serializer_class=Serializer) def send_wx_msg(self, request, pk=None): """微信模板消息发送测试 微信模板消息发送测试 """ wx_token = cache.get('wx_token', None) if not wx_token: wx_token = get_wx_token() data = { "touser": 'ocAnm5vab6QGOnf2dqpuUZGJ0xyw', "template_id": "wczl-hB_bs8CpxwO8_KZuogSTPFXqhBxf8C5HjKl2M4", "url": "http://weixin.qq.com/download", # "miniprogram":{ # "appid":"xiaochengxuappid12345", # "pagepath":"index?foo=bar" # }, "client_msg_id": "MSG_000001", "data": { "first": { "value": "恭喜你购买成功!", "color": "#173177" }, } } requests.post(url='https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='+wx_token, json=data) return Response({'wx_token': wx_token, 'wx_openid': 'ocAnm5vab6QGOnf2dqpuUZGJ0xyw'})