From d00e4f20f85c76c29826a9a2d5dcbb065b9d820a Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 29 May 2020 18:12:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=AF=E5=8A=A8=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/api/task.js | 9 +++ client/src/router/index.js | 6 ++ client/src/views/system/task.vue | 125 ++++++++++++++++++++++++++++++ docs/~$模块细分.docx | Bin 162 -> 0 bytes server/apps/system/models.py | 1 + server/apps/system/serializers.py | 10 ++- server/apps/system/tasks.py | 9 +++ server/apps/system/urls.py | 3 +- server/apps/system/views.py | 27 ++++--- server/requirements.txt | Bin 1164 -> 2208 bytes server/s_celerybeat.bat | 4 + server/s_celeryworker.bat | 4 + server/s_redis.bat | 2 - server/s_server.bat | 3 + server/server/__init__.py | 7 ++ server/server/celery.py | 24 ++++++ server/server/settings.py | 10 ++- server/server/settings_dev.py | 7 ++ server/server/settings_pro.py | 7 ++ 19 files changed, 241 insertions(+), 17 deletions(-) create mode 100644 client/src/api/task.js create mode 100644 client/src/views/system/task.vue delete mode 100644 docs/~$模块细分.docx create mode 100644 server/apps/system/tasks.py create mode 100644 server/s_celerybeat.bat create mode 100644 server/s_celeryworker.bat delete mode 100644 server/s_redis.bat create mode 100644 server/s_server.bat create mode 100644 server/server/celery.py diff --git a/client/src/api/task.js b/client/src/api/task.js new file mode 100644 index 0000000..f96205d --- /dev/null +++ b/client/src/api/task.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function getTaskList(query) { + return request({ + url: '/system/task/', + method: 'get', + params: query + }) +} diff --git a/client/src/router/index.js b/client/src/router/index.js index 85bf8c7..1a2c4d9 100644 --- a/client/src/router/index.js +++ b/client/src/router/index.js @@ -103,6 +103,12 @@ export const asyncRoutes = [ name: 'File', component: () => import('@/views/system/file'), meta: { title: '文件库', icon: 'documentation', perms: ['file_room'] } + }, + { + path: 'task', + name: 'Task', + component: () => import('@/views/system/task'), + meta: { title: '定时任务', icon: 'list', perms: ['task_manage'] } } ] }, diff --git a/client/src/views/system/task.vue b/client/src/views/system/task.vue new file mode 100644 index 0000000..4e1b908 --- /dev/null +++ b/client/src/views/system/task.vue @@ -0,0 +1,125 @@ + + diff --git a/docs/~$模块细分.docx b/docs/~$模块细分.docx deleted file mode 100644 index 4a4b94b2d5115b2435793a067368bf18e3160a1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmZQhF3e>h889;>GZZp_G#;-Iur1}-kigH#2;|+kwuv>Oou9Fq|9Hg_pcu$tCJ+Gy nf?3veJ$ly|(P@yH4|iofK+0;8`57-VAFt5hTExo0*uVe)5||q0 diff --git a/server/apps/system/models.py b/server/apps/system/models.py index e96adc5..bc223c2 100644 --- a/server/apps/system/models.py +++ b/server/apps/system/models.py @@ -8,6 +8,7 @@ from simple_history.models import HistoricalRecords + class Position(BaseModel): """ 职位/岗位 diff --git a/server/apps/system/serializers.py b/server/apps/system/serializers.py index 7901e48..9d3b723 100644 --- a/server/apps/system/serializers.py +++ b/server/apps/system/serializers.py @@ -1,8 +1,16 @@ import re +from django_celery_beat.models import PeriodicTask from rest_framework import serializers -from .models import Organization, Permission, Role, User, Position, DictType, Dict, File +from .models import (Dict, DictType, File, Organization, Permission, Position, + Role, User) + +class TaskSerializer(serializers.ModelSerializer): + class Meta: + model = PeriodicTask + fields = '__all__' + class FileSerializer(serializers.ModelSerializer): class Meta: diff --git a/server/apps/system/tasks.py b/server/apps/system/tasks.py new file mode 100644 index 0000000..95f1834 --- /dev/null +++ b/server/apps/system/tasks.py @@ -0,0 +1,9 @@ +# Create your tasks here +from __future__ import absolute_import, unicode_literals + +from celery import shared_task + + +@shared_task +def add(x, y): + return x + y \ No newline at end of file diff --git a/server/apps/system/urls.py b/server/apps/system/urls.py index 49aea89..3733f3d 100644 --- a/server/apps/system/urls.py +++ b/server/apps/system/urls.py @@ -1,5 +1,5 @@ from django.urls import path, include -from .views import UserViewSet, OrganizationViewSet, PermissionViewSet, RoleViewSet, PositionViewSet, TestView, DictTypeViewSet, DictViewSet +from .views import UserViewSet, OrganizationViewSet, PermissionViewSet, RoleViewSet, PositionViewSet, TestView, DictTypeViewSet, DictViewSet, TaskViewSet from rest_framework import routers @@ -11,6 +11,7 @@ router.register('role', RoleViewSet, basename="role") router.register('position', PositionViewSet, basename="position") router.register('dicttype', DictTypeViewSet, basename="dicttype") router.register('dict', DictViewSet, basename="dict") +router.register('task', TaskViewSet, basename="task") urlpatterns = [ path('', include(router.urls)), path('test/', TestView.as_view()) diff --git a/server/apps/system/views.py b/server/apps/system/views.py index f0b153a..ba2e2d8 100644 --- a/server/apps/system/views.py +++ b/server/apps/system/views.py @@ -1,7 +1,9 @@ import logging +from django.conf import settings from django.contrib.auth.hashers import check_password, make_password from django.core.cache import cache +from django_celery_beat.models import PeriodicTask from django_filters.rest_framework import DjangoFilterBackend from rest_framework import status from rest_framework.decorators import action @@ -10,6 +12,8 @@ from rest_framework.mixins import (CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin) from rest_framework.pagination import PageNumberPagination +from rest_framework.parsers import (FileUploadParser, JSONParser, + MultiPartParser) from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView @@ -19,15 +23,16 @@ from rest_framework_simplejwt.tokens import RefreshToken from utils.queryset import get_child_queryset2 from .filters import UserFilter -from .models import (Dict, DictType, Organization, Permission, Position, Role, - User, File) +from .mixins import CreateModelAMixin +from .models import (Dict, DictType, File, Organization, Permission, Position, + Role, User) from .permission import RbacPermission, get_permission_list from .permission_data import RbacFilterSet -from .serializers import (DictSerializer, DictTypeSerializer, +from .serializers import (DictSerializer, DictTypeSerializer, FileSerializer, OrganizationSerializer, PermissionSerializer, - PositionSerializer, RoleSerializer, + PositionSerializer, RoleSerializer, TaskSerializer, UserCreateSerializer, UserListSerializer, - UserModifySerializer, FileSerializer) + UserModifySerializer) logger = logging.getLogger('log') # logger.info('请求成功! response_code:{};response_headers:{};response_body:{}'.format(response_code, response_headers, response_body[:251])) @@ -40,6 +45,14 @@ class LogoutView(APIView): def get(self, request, *args, **kwargs): # 可将token加入黑名单 return Response(status=status.HTTP_200_OK) +class TaskViewSet(ModelViewSet): + queryset = PeriodicTask.objects.all() + serializer_class = TaskSerializer + search_fields = ['^name'] + filterset_fields = ['enabled'] + ordering = '-pk' + + class DictTypeViewSet(ModelViewSet): """ @@ -211,9 +224,6 @@ class UserViewSet(ModelViewSet): } return Response(data) -from rest_framework.parsers import MultiPartParser, JSONParser, FileUploadParser -from .mixins import CreateModelAMixin -from django.conf import settings class FileViewSet(ModelViewSet): """ 文件:增删改查 @@ -243,4 +253,3 @@ class FileViewSet(ModelViewSet): instance = serializer.save(create_by = self.request.user, name=name, size=size, type=type, mime=mime) instance.path = settings.MEDIA_URL + instance.file.name instance.save() - \ No newline at end of file diff --git a/server/requirements.txt b/server/requirements.txt index bbd5da536dac4acef34cf74062f1d8fdbc85f78c..59640cff05851ee66c1865af708078e4b9a1c3a8 100644 GIT binary patch literal 2208 zcmb7_OK;mi421Vwpg%=MtTbtQ=&h#!1p>4{&weP55=nL>I}iW(w)5?1CAm!xg|M&; zlEdMUT>bjF2z7W2yYN|09%kV}ClBw#yRZmNcn$ZV3tPQmKa=e|9^1RH31w(Q5pJU$ z8yM$(d>8hzZsoI%c5EMX=DqzO`&PLNovY|Emvv;YRAi;66qmNgAjhQ+zh@C=rT9vx z6MVv2rpvFS= zq+CrTH@6ts1oFVYFOh+d~Y?uciK{cQS) zMr-ebE1?VEmzu6D>b#fdT8Cez09I_Id6z=EjeJ(}D2Mvs#Xfni=&+GNfD5*Ku|9eN&PQQq@>vR_&<5@GZ>K7^;YF5I zkvW0)RWYql5Ayn^_gh6JuQ6*aq?N4fAXe%nuj{Ra-smvZjrgwy1b1Mk$dz&|;*HAg zgONuRBity8yKt+i!p0Pg8?lp8uR`E9-6+n{RLy-#70erUcAf2djXg?!+_~=GjV#yU zNBABwsBfG%Fqi};ZW`(D1y<_dCc!7w;Mu<%Sfr`v_Cj^g&~1w7nn4`BJ#&Tnz+6>> zKQ&JMkG&<`^8Ol~-bYNEHvnz0Jqp*#c;=X@Tu;)am7RN^du1kGyqg1E@aE2Y4d3>i zsb239l@c|gqu5L2?TLb$`_YM6HRw9dmcLD~XQocMjB}CpXssFN9&z8uF;;(2{iQ5? zkGO-`Z0B)~q%MB`8ZWi2)Buj}8gJKA?EAPKBgbdO@>Lx3&tvuO+fi{lJzx?8uB-nI D#r;8+ delta 65 zcmV-H0KWgA5sV1}|NfCYAd%uulTrb2llTFQlllUDlbi!0lLiDBlT-vIlb8fNlOzQu XlZXXklM)6XlTZdGlhg+AlLQD#N%