Files
game-cards-poker-design/backend/apps/management/commands/init_system.py
Poker Design Developer 0370e4018a Implement asset upload API and utility functions
- Add Asset and CardLayer model updates
- Create asset upload API endpoints
- Add AssetUploadDialog component
- Create card layout algorithms
- Implement symmetry generation utils
- Add template configurations
2026-05-31 15:33:50 +08:00

146 lines
5.3 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.
import os
from django.core.management.base import BaseCommand
from django.core.files.storage import default_storage
from apps.projects.models import Project, Asset, CardLayer
from apps.templates.models import CardTemplate
class Command(BaseCommand):
help = 'Initialize cards design system with sample data'
def handle(self, *args, **options):
self.stdout.write(self.style.SUCCESS('Starting initialization...'))
# 创建模板和数据
self.create_templates()
self.create_default_assets()
self.create_sample_project()
self.stdout.write(self.style.SUCCESS('Initialization complete!'))
def create_templates(self):
"""创建示例模板"""
templates = [
{
'id': 'classic',
'name': '经典风格',
'description': '标准扑克牌设计,传统花色和字体',
'color_spade': '#000000',
'color_heart': '#FF0000',
'color_club': '#000000',
'color_diamond': '#FF0000',
'color_background': '#FFFFFF',
},
{
'id': 'modern',
'name': '现代简约',
'description': '扁平化设计,简洁线条',
'color_spade': '#333333',
'color_heart': '#E53935',
'color_club': '#333333',
'color_diamond': '#E53935',
'color_background': '#FAFAFA',
}
]
for template_data in templates:
try:
template = CardTemplate.objects.get(id=template_data['id'])
if not template.default_assets:
template.default_assets = template_data
template.save()
except CardTemplate.DoesNotExist:
template = CardTemplate.objects.create(
id=template_data['id'],
name=template_data['name'],
description=template_data['description'],
color_spade=template_data['color_spade'],
color_heart=template_data['color_heart'],
color_club=template_data['color_club'],
color_diamond=template_data['color_diamond'],
color_background=template_data['color_background'],
default_assets=template_data
)
def create_default_assets(self):
"""创建默认花色素材"""
suits = {
'spade': 0xE27B60,
'heart': 0xE27B60,
'club': 0xE27B60,
'diamond': 0xE27B60
}
materials = 'backend/media/assets'
os.makedirs(materials, exist_ok=True)
for suit_name, color_code in suits.items():
# 创建简单SVG花色图案
svg_path = os.path.join('backend/media/assets', f'{suit_name}.svg')
storyboardSVG = '''<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<path d="M50 5 L50 30 L55 25 L55 5 Z" fill="''' f'#{color_code:06X}' f'"\n/>
<path d="M50 5 L45 25 L50 30 L55 25 Z" fill="''' f'#{color_code:06X}' f'"\n/>
<path d="M30 55 Q30 45 40 45 L50 55 L60 45 Q70 45 70 55 Q70 65 60 70 L50 60 L40 70 Q30 65 30 55 Z" fill="''' f'#{color_code:06X}' f'"\n/>
<path d="M20 80 L20 95 L80 95 L80 80" stroke="''' f'#{color_code:06X}' f'"\n stroke-width="8" fill="none"/>^
</svg>'''
with open(svg_path, 'w', encoding='utf-8') as f:
f.write(storyboardSVG)
# 创建Asset记录
Asset.objects.create(
asset_type='suit_symbol',
asset_key=suit_name,
color=f'#{color_code:06X}'
)
def create_sample_project(self):
"""创建示例项目"""
try:
project = Project.objects.get(name="示例项目")
self.stdout.write(self.style.WARNING('示例项目已存在,跳过创建'))
return
except Project.DoesNotExist:
project = Project.objects.create(
name="示例项目",
template_id='classic',
card_width=750,
card_height=1050,
export_resolution='standard',
export_include_back=True
)
# 创建示例素材
suit_assets = [
{'type': 'suit_symbol', 'key': 'spade'},
{'type': 'suit_symbol', 'key': 'heart'},
{'type': 'suit_symbol', 'key': 'club'},
{'type': 'suit_symbol', 'key': 'diamond'},
]
for asset_data in suit_assets:
Asset.objects.create(
asset_type=asset_data['type'],
asset_key=asset_data['key'],
width=60,
height=60
)
# 创建JQK示例素材记录临时
face_cards = [
{'type': 'face_card', 'key': 'spade-J'},
{'type': 'face_card', 'key': 'spade-Q'},
{'type': 'face_card', 'key': 'spade-K'},
]
for face_card in face_cards:
Asset.objects.create(
asset_type=face_card['type'],
asset_key=face_card['key'],
width=300,
height=500
)
self.stdout.write(self.style.SUCCESS(f'项目 "{project.name}" 已创建'))