UnisKB/apps/setting/serializers/system_setting.py

68 lines
3.3 KiB
Python
Raw Normal View History

2024-03-19 12:38:28 +00:00
# coding=utf-8
"""
@project: maxkb
@Author
@file system_setting.py
@date2024/3/19 16:29
@desc:
"""
from django.core.mail.backends.smtp import EmailBackend
from django.db.models import QuerySet
from rest_framework import serializers
from common.exception.app_exception import AppApiException
from common.util.field_message import ErrMessage
from setting.models.system_management import SystemSetting, SettingType
class SystemSettingSerializer(serializers.Serializer):
class EmailSerializer(serializers.Serializer):
@staticmethod
def one():
system_setting = QuerySet(SystemSetting).filter(type=SettingType.EMAIL.value).first()
if system_setting is None:
return {}
return system_setting.meta
class Create(serializers.Serializer):
email_host = serializers.CharField(required=True, error_messages=ErrMessage.char("SMTP 主机"))
email_port = serializers.IntegerField(required=True, error_messages=ErrMessage.char("SMTP 端口"))
email_host_user = serializers.CharField(required=True, error_messages=ErrMessage.char("发件人邮箱"))
email_host_password = serializers.CharField(required=True, error_messages=ErrMessage.char("密码"))
email_use_tls = serializers.BooleanField(required=True, error_messages=ErrMessage.char("是否开启TLS"))
email_use_ssl = serializers.BooleanField(required=True, error_messages=ErrMessage.char("是否开启SSL"))
from_email = serializers.EmailField(required=True, error_messages=ErrMessage.char("发送人邮箱"))
def is_valid(self, *, raise_exception=False):
super().is_valid(raise_exception=True)
try:
EmailBackend(self.data.get("email_host"),
self.data.get("email_port"),
self.data.get("email_host_user"),
self.data.get("email_host_password"),
self.data.get("email_use_tls"),
False,
self.data.get("email_use_ssl")
).open()
except Exception as e:
raise AppApiException(1004, "邮箱校验失败")
def update_or_save(self):
self.is_valid(raise_exception=True)
system_setting = QuerySet(SystemSetting).filter(type=SettingType.EMAIL.value).first()
if system_setting is None:
system_setting = SystemSetting(type=SettingType.EMAIL.value)
system_setting.meta = self.to_email_meta()
system_setting.save()
return system_setting.meta
def to_email_meta(self):
return {'email_host': self.data.get('email_host'),
'email_port': self.data.get('email_port'),
'email_host_user': self.data.get('email_host_user'),
'email_host_password': self.data.get('email_host_password'),
'email_use_tls': self.data.get('email_use_tls'),
'email_use_ssl': self.data.get('email_use_ssl'),
'from_email': self.data.get('from_email')
}