feat: 更改部分系统配置为json自定义
This commit is contained in:
parent
313005eb5c
commit
5ded2347b7
|
@ -16,6 +16,7 @@ celerybeat-schedule.dir
|
|||
db.sqlite3
|
||||
server/conf*.py
|
||||
server/conf.ini
|
||||
server/conf.json
|
||||
sh/*
|
||||
temp/*
|
||||
nohup.out
|
|
@ -3,7 +3,7 @@ from django.urls import path, include
|
|||
from .views import ApkViewSet, FileViewSet, PTaskViewSet, PTaskResultViewSet, PostRoleViewSet, TaskList, \
|
||||
UserPostViewSet, UserViewSet, DeptViewSet, \
|
||||
PermissionViewSet, RoleViewSet, PostViewSet, \
|
||||
DictTypeViewSet, DictViewSet
|
||||
DictTypeViewSet, DictViewSet, SysConfigView, SysBaseConfigView
|
||||
from rest_framework import routers
|
||||
|
||||
API_BASE_URL = 'api/system/'
|
||||
|
@ -31,5 +31,7 @@ router2.register('file', FileViewSet, basename='file')
|
|||
urlpatterns = [
|
||||
path(API_BASE_URL, include(router.urls)),
|
||||
path(API_BASE_URL + 'task/', TaskList.as_view()),
|
||||
path(API_BASE_URL + 'base_config/', SysBaseConfigView.as_view()),
|
||||
path(API_BASE_URL + 'config/', SysConfigView.as_view()),
|
||||
path('api/', include(router2.urls)),
|
||||
]
|
||||
|
|
|
@ -40,6 +40,8 @@ from .serializers import (ApkSerializer, DeptCreateUpdateSerializer, DeptSeriali
|
|||
from rest_framework.viewsets import GenericViewSet
|
||||
from cron_descriptor import get_description
|
||||
import locale
|
||||
from drf_yasg.utils import swagger_auto_schema
|
||||
from server.settings import SYSCONF, SYS_JSON_PATH
|
||||
|
||||
# logger.info('请求成功! response_code:{};response_headers:{};
|
||||
# response_body:{}'.format(response_code, response_headers, response_body[:251]))
|
||||
|
@ -656,9 +658,7 @@ class ApkViewSet(MyLoggingMixin, ListModelMixin, CreateModelMixin, GenericViewSe
|
|||
|
||||
获取apk信息
|
||||
"""
|
||||
config.read(filename, encoding='utf-8')
|
||||
file = config.get('apk', 'file')
|
||||
return Response({'version': config.get('apk', 'version'), 'file': file})
|
||||
return Response({'version': SYSCONF['apk']['apk_version'], 'file': SYSCONF['apk']['apk_file']})
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
"""
|
||||
|
@ -669,13 +669,11 @@ class ApkViewSet(MyLoggingMixin, ListModelMixin, CreateModelMixin, GenericViewSe
|
|||
sr = ApkSerializer(data=request.data)
|
||||
sr.is_valid(raise_exception=True)
|
||||
vdata = sr.validated_data
|
||||
config.read(filename, encoding='utf-8')
|
||||
config.set("apk", "version", vdata['version'])
|
||||
config.set("apk", "file", vdata['file'])
|
||||
with open(os.path.join(settings.BASE_DIR, 'server/conf.ini'), 'w') as f:
|
||||
config.write(f)
|
||||
from shutil import copyfile
|
||||
copyfile(settings.BASE_DIR + vdata['file'], settings.BASE_DIR + '/media/zc_ehs.apk')
|
||||
SYSCONF['apk']['apk_version'] = vdata['version']
|
||||
SYSCONF['apk']['apk_file'] = vdata['file']
|
||||
SysConfigView.save_sysconf()
|
||||
return Response()
|
||||
|
||||
|
||||
|
@ -721,3 +719,63 @@ class MyScheduleViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, Cus
|
|||
obj.name = self.get_chinese_description('crontab', vdata)
|
||||
obj.crontab = crontab
|
||||
obj.save()
|
||||
|
||||
|
||||
class SysBaseConfigView(APIView):
|
||||
authentication_classes = []
|
||||
permission_classes = []
|
||||
read_keys = ['base', 'apk']
|
||||
|
||||
def get(self, request, format=None):
|
||||
"""
|
||||
获取系统基本信息
|
||||
|
||||
获取系统基本信息
|
||||
"""
|
||||
base_dict = {key: SYSCONF[key] for key in self.read_keys if key in SYSCONF}
|
||||
return Response(base_dict)
|
||||
|
||||
class SysConfigView(MyLoggingMixin, APIView):
|
||||
perms_map = {'get': 'sysconfig.view', 'put': 'sysconfig.update'}
|
||||
|
||||
def update_dict(self, dict1, dict2):
|
||||
for key, value in dict2.items():
|
||||
if key == 'apk_file': # apk_file拷贝到固定位置
|
||||
from shutil import copyfile
|
||||
copyfile(settings.BASE_DIR + value, settings.BASE_DIR + '/media/zc_ehs.apk')
|
||||
else:
|
||||
if key in dict1 and isinstance(dict1[key], dict) and isinstance(value, dict):
|
||||
self.update_dict(dict1[key], value)
|
||||
else:
|
||||
dict1[key] = value
|
||||
|
||||
@staticmethod
|
||||
def save_sysconf():
|
||||
with open(SYS_JSON_PATH, 'wb') as f:
|
||||
f.write(json.dumps(SYSCONF, indent=4, ensure_ascii=False).encode('utf-8'))
|
||||
|
||||
def get(self, request, format=None):
|
||||
"""
|
||||
获取config json
|
||||
|
||||
获取config json
|
||||
"""
|
||||
return Response(SYSCONF)
|
||||
|
||||
@swagger_auto_schema(request_body=Serializer)
|
||||
def put(self, request, format=None):
|
||||
"""
|
||||
修改config json
|
||||
|
||||
修改config json
|
||||
"""
|
||||
data = request.data
|
||||
global SYSCONF
|
||||
old_sysconf = SYSCONF
|
||||
try:
|
||||
self.update_dict(SYSCONF, data)
|
||||
self.save_sysconf()
|
||||
except:
|
||||
SYSCONF = old_sysconf
|
||||
raise
|
||||
return Response()
|
|
@ -1,9 +1,8 @@
|
|||
from aliyunsdkcore.client import AcsClient
|
||||
from aliyunsdkcore.request import CommonRequest
|
||||
from django.conf import settings
|
||||
import json
|
||||
import logging
|
||||
from apps.utils.myconfig import myConfig
|
||||
from server.settings import SYSCONF
|
||||
from apps.utils.decorators import auto_log
|
||||
|
||||
# 实例化myLogger
|
||||
|
@ -11,7 +10,7 @@ myLogger = logging.getLogger('log')
|
|||
|
||||
@auto_log(name='阿里云短信', raise_exception=False, send_mail=True)
|
||||
def send_sms(phone: str, template_code: int, template_param: dict):
|
||||
client = AcsClient(myConfig.get_option_value('sms', 'xn_key'), myConfig.get_option_value('sms', 'xn_secret'), 'default')
|
||||
client = AcsClient(SYSCONF['sms']['xn_key'], SYSCONF['sms']['xn_secret'], 'default')
|
||||
request = CommonRequest()
|
||||
# 固定json
|
||||
request.set_accept_format('json')
|
||||
|
@ -28,7 +27,7 @@ def send_sms(phone: str, template_code: int, template_param: dict):
|
|||
# 手机号码
|
||||
request.add_query_param('PhoneNumbers', phone)
|
||||
# 签名名称
|
||||
request.add_query_param('SignName', settings.PROJECT_NAME)
|
||||
request.add_query_param('SignName', SYSCONF['sms']['xn_sign'])
|
||||
# 模板CODE
|
||||
request.add_query_param('TemplateCode', template_code)
|
||||
# 如果有模板参数 填写模板参数 如果无 无须填写
|
||||
|
|
|
@ -3,6 +3,7 @@ from celery import Task
|
|||
from celery import shared_task
|
||||
import logging
|
||||
from django.conf import settings
|
||||
from server.settings import SYSCONF
|
||||
|
||||
# 实例化myLogger
|
||||
myLogger = logging.getLogger('log')
|
||||
|
@ -12,7 +13,7 @@ myLogger = logging.getLogger('log')
|
|||
def send_mail_task(**args):
|
||||
if settings.DEBUG is False:
|
||||
from django.core.mail import send_mail
|
||||
args['subject'] = '{}:{}_{}_{}'.format(settings.SYS_NAME, settings.SYS_VERSION, settings.PROJECT_NAME, args.get('subject', '500'))
|
||||
args['subject'] = '{}:{}_{}_{}'.format(settings.SYS_NAME, settings.SYS_VERSION, SYSCONF['base']['base_name_short'], args.get('subject', '500'))
|
||||
args['from_email'] = args.get('from_email', settings.EMAIL_HOST_USER)
|
||||
args['recipient_list'] = args.get('recipient_list', [settings.EMAIL_HOST_USER])
|
||||
send_mail(**args)
|
||||
|
|
|
@ -12,6 +12,7 @@ https://docs.djangoproject.com/en/3.0/ref/settings/
|
|||
|
||||
from datetime import datetime, timedelta
|
||||
import os
|
||||
import json
|
||||
from . import conf
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
@ -20,6 +21,13 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/
|
||||
|
||||
# 读取配置文件
|
||||
SYS_JSON_PATH = os.path.join(BASE_DIR, 'server/conf.json')
|
||||
if not os.path.exists(SYS_JSON_PATH):
|
||||
raise SystemError('未找到配置文件')
|
||||
with open(SYS_JSON_PATH, 'r', encoding='utf-8') as f:
|
||||
SYSCONF = json.loads(f.read())
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = conf.SECRET_KEY
|
||||
|
||||
|
@ -30,7 +38,6 @@ ALLOWED_HOSTS = ['*']
|
|||
|
||||
SYS_NAME = 'XT_EHS'
|
||||
SYS_VERSION = '2.2.1'
|
||||
PROJECT_NAME = conf.PROJECT_NAME
|
||||
|
||||
|
||||
# Application definition
|
||||
|
@ -164,7 +171,7 @@ EMAIL_HOST = conf.EMAIL_HOST
|
|||
EMAIL_PORT = conf.EMAIL_PORT
|
||||
EMAIL_HOST_USER = conf.EMAIL_HOST_USER
|
||||
EMAIL_HOST_PASSWORD = conf.EMAIL_HOST_PASSWORD
|
||||
EMAIL_SUBJECT_PREFIX = conf.EMAIL_SUBJECT_PREFIX
|
||||
EMAIL_SUBJECT_PREFIX = SYSCONF['base']['base_name_short']
|
||||
EMAIL_USE_TLS = conf.EMAIL_USE_TLS
|
||||
|
||||
# 默认主键
|
||||
|
@ -388,11 +395,6 @@ BACKUP_PATH = conf.BACKUP_PATH
|
|||
SH_PATH = conf.SH_PATH
|
||||
|
||||
|
||||
# 小牛短信
|
||||
XNIU_SMS_KEY = conf.XNIU_SMS_KEY
|
||||
XNIU_SMS_SECRET = conf.XNIU_SMS_SECRET
|
||||
|
||||
|
||||
# 百度语音
|
||||
BD_SP_ID = conf.BD_SP_ID
|
||||
BD_SP_KEY = conf.BD_SP_KEY
|
||||
|
|
Loading…
Reference in New Issue