apk上传更新功能

This commit is contained in:
曹前明 2022-08-08 08:51:07 +08:00
parent b21441ad76
commit 53db107a88
7 changed files with 52 additions and 9 deletions

2
.gitignore vendored
View File

@ -13,6 +13,6 @@ celerybeat-schedule.dat
celerybeat-schedule.dir celerybeat-schedule.dir
db.sqlite3 db.sqlite3
server/conf.py server/conf.py
server/conf.json server/conf.ini
sh/* sh/*
nohup.out nohup.out

View File

@ -406,3 +406,8 @@ class UserInfoSerializer(CustomModelSerializer):
class Meta: class Meta:
model = User model = User
fields = ['id', 'username', 'name', 'posts_', 'avatar'] fields = ['id', 'username', 'name', 'posts_', 'avatar']
class ApkSerializer(serializers.Serializer):
version = serializers.CharField(label='版本号')
file = serializers.CharField(label='文件地址')

View File

@ -1,5 +1,6 @@
from email.mime import base
from django.urls import path, include from django.urls import path, include
from .views import FileViewSet, PTaskViewSet, PTaskResultViewSet, PostRoleViewSet, TaskList, \ from .views import ApkView, FileViewSet, PTaskViewSet, PTaskResultViewSet, PostRoleViewSet, TaskList, \
UserPostViewSet, UserViewSet, DeptViewSet, \ UserPostViewSet, UserViewSet, DeptViewSet, \
PermissionViewSet, RoleViewSet, PostViewSet, \ PermissionViewSet, RoleViewSet, PostViewSet, \
DictTypeViewSet, DictViewSet DictTypeViewSet, DictViewSet
@ -29,5 +30,6 @@ router2.register('file', FileViewSet, basename='file')
urlpatterns = [ urlpatterns = [
path(API_BASE_URL, include(router.urls)), path(API_BASE_URL, include(router.urls)),
path(API_BASE_URL + 'task/', TaskList.as_view()), path(API_BASE_URL + 'task/', TaskList.as_view()),
path(API_BASE_URL + 'apk/', ApkView.as_view()),
path('api/', include(router2.urls)), path('api/', include(router2.urls)),
] ]

View File

@ -1,3 +1,5 @@
import configparser
import os
import importlib import importlib
import json import json
from django.contrib.auth.hashers import check_password, make_password from django.contrib.auth.hashers import check_password, make_password
@ -17,14 +19,14 @@ from rest_framework.views import APIView
from apps.system.errors import OLD_PASSWORD_WRONG, PASSWORD_NOT_SAME, SCHEDULE_WRONG from apps.system.errors import OLD_PASSWORD_WRONG, PASSWORD_NOT_SAME, SCHEDULE_WRONG
from apps.system.filters import UserFilterSet from apps.system.filters import UserFilterSet
# from django_q.models import Task as QTask, Schedule as QSchedule # from django_q.models import Task as QTask, Schedule as QSchedule
from apps.utils.mixins import (CustomCreateModelMixin) from apps.utils.mixins import (CustomCreateModelMixin, MyLoggingMixin)
from django.conf import settings from django.conf import settings
from apps.utils.permission import ALL_PERMS, get_user_perms_map from apps.utils.permission import ALL_PERMS, get_user_perms_map
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from server.celery import app as celery_app from server.celery import app as celery_app
from .models import (Dept, Dictionary, DictType, File, Permission, Post, PostRole, Role, User, from .models import (Dept, Dictionary, DictType, File, Permission, Post, PostRole, Role, User,
UserPost) UserPost)
from .serializers import (DeptCreateUpdateSerializer, DeptSerializer, DictCreateUpdateSerializer, from .serializers import (ApkSerializer, DeptCreateUpdateSerializer, DeptSerializer, DictCreateUpdateSerializer,
DictSerializer, DictTypeCreateUpdateSerializer, DictTypeSerializer, DictSerializer, DictTypeCreateUpdateSerializer, DictTypeSerializer,
FileSerializer, PasswordChangeSerializer, PermissionCreateUpdateSerializer, FileSerializer, PasswordChangeSerializer, PermissionCreateUpdateSerializer,
PermissionSerializer, PostCreateUpdateSerializer, PostRoleCreateSerializer, PermissionSerializer, PostCreateUpdateSerializer, PostRoleCreateSerializer,
@ -33,6 +35,7 @@ from .serializers import (DeptCreateUpdateSerializer, DeptSerializer, DictCreate
RoleCreateUpdateSerializer, RoleSerializer, TaskRunSerializer, RoleCreateUpdateSerializer, RoleSerializer, TaskRunSerializer,
UserCreateSerializer, UserListSerializer, UserPostCreateSerializer, UserCreateSerializer, UserListSerializer, UserPostCreateSerializer,
UserPostSerializer, UserUpdateSerializer) UserPostSerializer, UserUpdateSerializer)
from rest_framework.generics import ListCreateAPIView
# logger.info('请求成功! response_code:{}response_headers:{} # logger.info('请求成功! response_code:{}response_headers:{}
@ -566,3 +569,35 @@ class FileViewSet(CustomCreateModelMixin, RetrieveModelMixin, ListModelMixin, Cu
create_by=self.request.user, name=name, size=size, type=file_type, mime=mime) create_by=self.request.user, name=name, size=size, type=file_type, mime=mime)
instance.path = settings.MEDIA_URL + instance.file.name instance.path = settings.MEDIA_URL + instance.file.name
instance.save() instance.save()
# 生成ConfigParser对象
config = configparser.ConfigParser()
# 读取配置文件
filename = os.path.join(settings.BASE_DIR, 'server/conf.ini')
config.read(filename, encoding='utf-8')
class ApkView(MyLoggingMixin, ListCreateAPIView):
authentication_classes = []
permission_classes = []
serializer_class = ApkSerializer
def get(self, request):
"""获取apk信息
获取apk信息
"""
file = config.get('apk', 'file')
if not file.startswith('http'):
file = settings.BASE_URL + file
return Response({'version': config.get('apk', 'version'), 'file': file})
def post(self, request):
sr = ApkSerializer(data=request.data)
sr.is_valid(raise_exception=True)
vdata = sr.validated_data
config.set("apk", "version", vdata['version'])
config.set("apk", "file", vdata['file'])
config.write(open(os.path.join(settings.BASE_DIR, 'server/conf.ini'), 'w'))
return Response()

View File

@ -55,4 +55,4 @@ class SignatureViewSet(CustomCreateModelMixin, CustomGenericViewSet):
cv2.imwrite(new_path, image) cv2.imwrite(new_path, image)
return Response({'path': new_path.replace(BASE_DIR, '')}) return Response({'path': new_path.replace(BASE_DIR, '')})
except Exception: except Exception:
raise ParseError(**SIGN_MAKE_FAIL) raise ParseError(**SIGN_MAKE_FAIL)

View File

@ -91,7 +91,7 @@ class WxmpClient:
"errors": errors "errors": errors
}) })
Tlog(**self.log).save() Tlog(**self.log).save()
def get_basic_info(self, code): def get_basic_info(self, code):
params = { params = {
'appid': self.app_id, 'appid': self.app_id,

View File

@ -11,10 +11,8 @@ https://docs.djangoproject.com/en/3.0/ref/settings/
""" """
from datetime import datetime, timedelta from datetime import datetime, timedelta
import json
import os import os
from . import conf from . import conf
import logging
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@ -346,7 +344,8 @@ LOGGING = {
} }
} }
# 项目地址 # 项目
VERSION = '1.0.0'
BASE_URL = conf.BASE_URL BASE_URL = conf.BASE_URL
# 大华ICC平台 # 大华ICC平台
@ -404,3 +403,5 @@ WXMP_APPSECRET = conf.WXMP_APPSECRET
WX_ENABLED = conf.WX_ENABLED WX_ENABLED = conf.WX_ENABLED
WX_APPID = conf.WX_APPID WX_APPID = conf.WX_APPID
WX_APPSECRET = conf.WX_APPSECRET WX_APPSECRET = conf.WX_APPSECRET