92 lines
3.5 KiB
Python
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'),
|
|
}
|