Files
along_django/utils/xcx_sys_config.py

124 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
小程序/微信系统配置 — 优先读数据库 XcxSysPeizhi空则回退 settings.py兼容旧部署
"""
import logging
from django.conf import settings
from django.core.cache import cache
logger = logging.getLogger(__name__)
_CACHE_KEY = 'xcx_sys_peizhi_row_v1'
_CACHE_TTL = 120
def clear_xcx_sys_peizhi_cache():
cache.delete(_CACHE_KEY)
def _load_row():
cached = cache.get(_CACHE_KEY)
if cached is not _CACHE_NONE and cached is not None:
return cached
try:
from peizhi.models import XcxSysPeizhi
row = XcxSysPeizhi.objects.first()
except Exception as e:
logger.warning('读取 XcxSysPeizhi 失败,使用 settings 回退: %s', e)
row = None
cache.set(_CACHE_KEY, row if row else _CACHE_NONE, _CACHE_TTL)
return row if row else None
_CACHE_NONE = object()
def _val(db_attr, settings_attr, default=None):
row = _load_row()
if row is not None:
v = getattr(row, db_attr, None)
if v is not None and v != '':
return v
if settings_attr:
v = getattr(settings, settings_attr, default)
return v if v is not None and v != '' else default
return default
class WxConfig:
"""微信/小程序配置代理(属性名与 settings 保持一致,便于渐进替换)"""
@property
def WEIXIN_APPID(self):
return _val('weixin_appid', 'WEIXIN_APPID', '')
@property
def WEIXIN_SECRET(self):
return _val('weixin_secret', 'WEIXIN_SECRET', '')
@property
def WEIXIN_OFFICIAL_APPID(self):
return _val('weixin_official_appid', 'WEIXIN_OFFICIAL_APPID', '')
@property
def WEIXIN_OFFICIAL_SECRET(self):
return _val('weixin_official_secret', 'WEIXIN_OFFICIAL_SECRET', '')
@property
def WEIXIN_OFFICIAL_TOKEN(self):
return _val('weixin_official_token', 'WEIXIN_OFFICIAL_TOKEN', '')
@property
def WEIXIN_OFFICIAL_ENCODING_AES_KEY(self):
return _val('weixin_official_encoding_aes_key', 'WEIXIN_OFFICIAL_ENCODING_AES_KEY', '')
@property
def WEIXIN_TEMPLATE_ID(self):
return _val('weixin_template_id', 'WEIXIN_TEMPLATE_ID', '')
@property
def WEIXIN_TEMPLATE_MAX_PER_MINUTE(self):
return _val('weixin_template_max_per_minute', 'WEIXIN_TEMPLATE_MAX_PER_MINUTE', 950)
@property
def WEIXIN_TEMPLATE_BATCH_SIZE(self):
return _val('weixin_template_batch_size', 'WEIXIN_TEMPLATE_BATCH_SIZE', 100)
@property
def WEIXIN_BROADCAST_ENABLED(self):
row = _load_row()
if row is not None:
return bool(row.weixin_broadcast_enabled)
return getattr(settings, 'WEIXIN_BROADCAST_ENABLED', True)
@property
def WEIXIN_BROADCAST_WORKERS(self):
return _val('weixin_broadcast_workers', 'WEIXIN_BROADCAST_WORKERS', 30)
@property
def WEIXIN_MCHID(self):
return _val('weixin_mchid', 'WEIXIN_MCHID', '')
@property
def WEIXIN_SHANGHUMIYAO(self):
return _val('weixin_shanghu_miyao', 'WEIXIN_SHANGHUMIYAO', '')
@property
def WEIXIN_NOTIFY_URL(self):
return _val('weixin_notify_url', 'WEIXIN_NOTIFY_URL', '')
@property
def WEIXIN_CERT_PATH(self):
return _val('weixin_cert_path', 'WEIXIN_CERT_PATH', '')
@property
def WEIXIN_KEY_PATH(self):
return _val('weixin_key_path', 'WEIXIN_KEY_PATH', '')
@property
def NOTIFY_BASE_URL(self):
return _val('notify_base_url', None, 'https://wenhe.nmslb.com/hqhd').rstrip('/')
wx_cfg = WxConfig()