init medical training project

This commit is contained in:
2026-05-29 15:58:00 +08:00
commit b4bb38b7be
91 changed files with 6765 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
import random
import string
import logging
from abc import ABC, abstractmethod
from django.conf import settings
logger = logging.getLogger(__name__)
def generate_sms_code(length=6) -> str:
return ''.join(random.choices(string.digits, k=length))
# ── 策略接口 ──────────────────────────────────────────────────────────────────
class SmsService(ABC):
@abstractmethod
def send_code(self, phone: str, scene: str, code: str) -> None:
"""发送验证码短信。失败时抛出 SmsError。"""
class SmsError(Exception):
pass
def get_sms_service() -> SmsService:
provider = getattr(settings, 'SMS_PROVIDER', 'mock')
if provider == 'aliyun':
from apps.user.utils.sms_aliyun import AliyunSmsService
return AliyunSmsService()
from apps.user.utils.sms_mock import MockSmsService
return MockSmsService()