feat: 完善变更服务器时间的接口

This commit is contained in:
caoqianming 2025-05-19 10:08:58 +08:00
parent 0f0b055101
commit 1a1f64f9fe
3 changed files with 34 additions and 12 deletions

View File

@ -35,4 +35,9 @@ class SpeakerSerializer(serializers.Serializer):
class AreaManSerializer(serializers.Serializer):
area = serializers.CharField()
area = serializers.CharField()
class ServerTimeSerializer(serializers.Serializer):
server_time = serializers.DateTimeField()
timezone = serializers.CharField(read_only=True)

View File

@ -1,6 +1,6 @@
from django.urls import path, include
from apps.develop.views import (BackupDatabase, BackupMedia, ReloadClientGit,
ReloadServerGit, ReloadServerOnly, TestViewSet, CorrectViewSet, testScanHtml, ChangeServerDate)
ReloadServerGit, ReloadServerOnly, TestViewSet, CorrectViewSet, testScanHtml, ServerTime)
from rest_framework.routers import DefaultRouter
API_BASE_URL = 'api/develop/'
@ -15,7 +15,7 @@ urlpatterns = [
path(API_BASE_URL + 'reload_server_only/', ReloadServerOnly.as_view()),
path(API_BASE_URL + 'backup_database/', BackupDatabase.as_view()),
path(API_BASE_URL + 'backup_media/', BackupMedia.as_view()),
path(API_BASE_URL + 'change_server_date/', ChangeServerDate.as_view()),
path(API_BASE_URL + 'server_time/', ServerTime.as_view()),
path(API_BASE_URL, include(router.urls)),
path(HTML_BASE_URL + "testscan/", testScanHtml)
]

View File

@ -2,14 +2,14 @@
from rest_framework.views import APIView
from rest_framework.exceptions import ParseError
from rest_framework.permissions import IsAdminUser
from rest_framework.permissions import IsAdminUser, AllowAny
from rest_framework.response import Response
from rest_framework.serializers import Serializer
from rest_framework.decorators import action
from apps.am.models import Area
from apps.am.tasks import cache_areas_info
from apps.develop.serializers import AreaManSerializer, CleanDataSerializer, GenerateVoiceSerializer, SendSmsSerializer, SpeakerSerializer, \
TestTaskSerializer, TestAlgoSerializer
TestTaskSerializer, TestAlgoSerializer, ServerTimeSerializer
from apps.develop.tasks import backup_database, backup_media, reload_web_git, reload_server_git, reload_server_only
from rest_framework.exceptions import APIException
from apps.ecm.service import check_not_in_place, create_remind, handle_xx_event, loc_change, notify_event, rail_in, snap_and_analyse
@ -33,25 +33,42 @@ from django.db import transaction
from django.core.cache import cache
from apps.utils.decorators import auto_log
from django.http import HttpResponse
from server.settings import SD_PWD
from server.settings import SD_PWD, TIME_ZONE
import subprocess
from drf_yasg.utils import swagger_auto_schema
from datetime import datetime
# Create your views here.
class ChangeServerDate(APIView):
permission_classes = [IsAdminUser]
class ServerTime(APIView):
@swagger_auto_schema(request_body=Serializer)
def get_permissions(self):
if self.request.method == 'GET':
return [AllowAny()]
return [IsAdminUser()]
@swagger_auto_schema(responses={200: ServerTimeSerializer})
def get(self, request):
"""
获取服务器时间
获取服务器时间
"""
return Response({"server_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "timezone": TIME_ZONE})
@swagger_auto_schema(request_body=ServerTimeSerializer)
def post(self, request):
"""
修改服务器时间
修改服务器时间
"""
command = 'echo "{}" | sudo -s date "{}"'.format(
SD_PWD, request.data["date"]
command = f'date -s "{request.data["new_server_time"]}"'
completed = subprocess.run(
["sudo", "sh", "-c", command], # 避免 shell=True 的安全风险
input=SD_PWD, # 密码从安全配置读取
capture_output=True,
text=True
)
completed = subprocess.run(command, shell=True, capture_output=True, text=True)
if completed.returncode != 0:
raise ParseError(completed.stderr)
return Response()