Files
along_django/utils/page_ziyuan_service.py

92 lines
3.5 KiB
Python

"""小程序页面静态资源(背景图/图标)— 数据库配置 + 默认值"""
from django.core.cache import cache
_CACHE_PREFIX = 'xcx_page_ziyuan_v1'
_CACHE_TTL = 120
# 默认资源(相对 OSS 路径,不含域名)
DEFAULT_ZIYUAN = {
'paihangbang.pageBg': 'beijing/paihangbang/page-bg.jpg',
'paihangbang.cardBg': 'beijing/paihangbang/list-card-bg.png',
'paihangbang.emptyIcon': 'beijing/paihangbang/empty.png',
'paihangbang.refreshIcon': 'beijing/paihangbang/icon-refresh.png',
'shangjiaduan.pageBg': 'beijing/shangjiaduan/page_bg.png',
'shangjiaduan.avatarCardBg': 'beijing/shangjiaduan/avatar_card_bg.png',
'shangjiaduan.assetCardBg': 'beijing/shangjiaduan/asset_card_bg.png',
'shangjiaduan.statCardBg': 'beijing/shangjiaduan/stat_card_bg.png',
'shangjiaduan.funcItemBg': 'beijing/shangjiaduan/func_item_bg.png',
'shangjiaduan.primaryFuncBg': 'beijing/shangjiaduan/primary_func_bg.png',
'shangjiaduan.highlightFuncBg': 'beijing/shangjiaduan/highlight_func_bg.png',
'shangjiaduan.iconRelease': 'beijing/shangjiaduan/icon_release.png',
'shangjiaduan.iconFast': 'beijing/shangjiaduan/icon_fast.png',
'shangjiaduan.iconOrders': 'beijing/shangjiaduan/icon_orders.png',
'shangjiaduan.iconService': 'beijing/shangjiaduan/icon_service.png',
'shangjiaduan.iconPunish': 'beijing/shangjiaduan/icon_punish.png',
'shangjiaduan.iconRank': 'beijing/shangjiaduan/icon_rank.png',
'shangjiaduan.iconRecharge': 'beijing/shangjiaduan/icon_recharge.png',
'shangjiaduan.iconWithdraw': 'beijing/shangjiaduan/icon_withdraw.png',
'shangjiaduan.iconRefresh': 'beijing/shangjiaduan/icon_refresh.png',
'shangjiaduan.iconCopy': 'beijing/shangjiaduan/icon_copy.png',
'shangjiaduan.avatarFrame': 'beijing/shangjiaduan/avatar_frame.png',
}
def clear_page_ziyuan_cache():
cache.delete_many([f'{_CACHE_PREFIX}:all', f'{_CACHE_PREFIX}:paihangbang', f'{_CACHE_PREFIX}:shangjiaduan'])
def _load_all_from_db():
try:
from peizhi.models import XcxPageZiyuan
rows = XcxPageZiyuan.objects.all()
data = {}
for r in rows:
key = f'{r.ziyuan_zu}.{r.ziyuan_key}'
if r.ziyuan_path:
data[key] = r.ziyuan_path.lstrip('/')
return data
except Exception:
return {}
def get_all_ziyuan_merged():
cached = cache.get(f'{_CACHE_PREFIX}:all')
if cached is not None:
return cached
merged = dict(DEFAULT_ZIYUAN)
merged.update(_load_all_from_db())
cache.set(f'{_CACHE_PREFIX}:all', merged, _CACHE_TTL)
return merged
def get_ziyuan_group(zu: str) -> dict:
cache_key = f'{_CACHE_PREFIX}:{zu}'
cached = cache.get(cache_key)
if cached is not None:
return cached
merged = get_all_ziyuan_merged()
group = {}
prefix = f'{zu}.'
for k, v in merged.items():
if k.startswith(prefix):
group[k[len(prefix):]] = v
cache.set(cache_key, group, _CACHE_TTL)
return group
def build_paihang_assets_for_api():
g = get_ziyuan_group('paihangbang')
return {
'pageBg': g.get('pageBg', DEFAULT_ZIYUAN['paihangbang.pageBg']),
'cardBg': g.get('cardBg', DEFAULT_ZIYUAN['paihangbang.cardBg']),
'emptyIcon': g.get('emptyIcon', DEFAULT_ZIYUAN['paihangbang.emptyIcon']),
'refreshIcon': g.get('refreshIcon', DEFAULT_ZIYUAN['paihangbang.refreshIcon']),
}
def build_page_assets_for_api():
return {
'shangjiaduan': get_ziyuan_group('shangjiaduan'),
'paihangbang': get_ziyuan_group('paihangbang'),
}