diff --git a/backend/journal/management/commands/seed_nepal_story.py b/backend/journal/management/commands/seed_nepal_story.py index e5b2cf0..686f46d 100644 --- a/backend/journal/management/commands/seed_nepal_story.py +++ b/backend/journal/management/commands/seed_nepal_story.py @@ -12,28 +12,88 @@ class Command(BaseCommand): Memory.objects.all().delete() Memory.objects.create( - story_order=10, + story_order=20260420, date=date(2026, 4, 20), - event_title="第一次遇见你", + event_title="第一条私信", main_text=( - "**2026 年 4 月 20 日**,故事从这里开始。\n\n" + "**2026 年 4 月 20 日**,故事从屏幕亮起的那一刻开始。\n\n" + "成电、读博、课题组……你把担心和好奇都写进了陌生人私信里。" + "我被你的文字吸引,于是我们开始了聊天。" + ), + unique_feature_type=Memory.FeatureType.FIRST_MEET, + nepal_art_style=Memory.NepalArtStyle.NIGHT_STAR, + is_finale=False, + ) + Memory.objects.create( + story_order=20260422, + date=date(2026, 4, 22), + event_title="集电院", + main_text=( + "**2026 年 4 月 22 日**,给你拍下了集电院,了解到你最害怕冷暴力了。\n\n" + "集电,冷暴力,摩斯密码,凌晨2点还在聊。" + "万水千山总会有人陪你去看。" + ), + unique_feature_type=Memory.FeatureType.FIRST_MEET_JU, + nepal_art_style=Memory.NepalArtStyle.NIGHT_STAR, + is_finale=False, + ) + Memory.objects.create( + story_order=20260423, + date=date(2026, 4, 24), + event_title="瑞幸咖啡", + main_text=( + "**2026 年 4 月 24 日**,你给我买了瑞幸咖啡,留意到我很喜欢喝橙C,桌角的灵笼也被你注意到了。\n\n" + "咖啡,橙C,灵笼,喜欢你,喜欢我。" + "桌角的细节总会有人注意到。" + ), + unique_feature_type=Memory.FeatureType.FIRST_MEET_RUI, + nepal_art_style=Memory.NepalArtStyle.NIGHT_STAR, + is_finale=False, + ) + Memory.objects.create( + story_order=20260424, + date=date(2026, 4, 24), + event_title="第一次通电话", + main_text=( + "**2026 年 4 月 24 日**,第一次通电话,给你说起了我们学校集电事件。\n\n" + "第一次听到你的声音,很温柔,很害羞。简单20分钟,希望能够帮助到你。" + "这个就是爱情,但不是你们那种样子" + ), + unique_feature_type=Memory.FeatureType.FIRST_MEET_RUI, + nepal_art_style=Memory.NepalArtStyle.NIGHT_STAR, + is_finale=False, + ) + Memory.objects.create( + story_order=20260430, + date=date(2026, 4, 30), + event_title="高铁相遇", + main_text=( + "**2026 年 4 月 30 日**,故事从这里开始。\n\n" "相识、相见、相遇——我把这一页留给那天的风与心跳。" ), - unique_feature_type=Memory.FeatureType.STANDARD_NEPAL, + unique_feature_type=Memory.FeatureType.FIRST_MEET_TRAIN, nepal_art_style=Memory.NepalArtStyle.DAWN_MEET, is_finale=False, ) Memory.objects.create( - story_order=20, + story_order=20260503, date=date(2026, 5, 3), event_title="那天我们吵架了", - main_text="旁人皆三千江水,唯你是心上涟漪。", + main_text=( + "**那天吵架,不是因为不在意,而是因为我越界了。**\n\n" + "我把你和前任之间的事情告诉了别人。那些本该只停留在你我之间的话," + "被我轻率地说出口,最后变成了别人对你评头论足的谈资。\n\n" + "我后来写了很长的一段话向你道歉,也向你解释:我不是想伤害你," + "只是我真的做错了。可是我也知道,解释不能抵消伤害," + "对不起这三个字也不该说得太轻。\n\n" + "> 那天我最想做的,不是证明自己没有恶意,而是把你重新好好护回我的这一边。" + ), unique_feature_type=Memory.FeatureType.FISSURE_PAGE, nepal_art_style=Memory.NepalArtStyle.BLUSH_ARGUE, is_finale=False, ) Memory.objects.create( - story_order=30, + story_order=20260504, date=date(2026, 5, 4), event_title="和好了,在一起吧", main_text=( @@ -45,7 +105,7 @@ class Command(BaseCommand): is_finale=False, ) Memory.objects.create( - story_order=40, + story_order=20260508, date=date(2026, 5, 8), event_title="一起租了房", main_text=( @@ -57,7 +117,7 @@ class Command(BaseCommand): is_finale=False, ) Memory.objects.create( - story_order=50, + story_order=20260510, date=date(2026, 5, 10), event_title="逛宜家的小日子", main_text=( @@ -69,7 +129,7 @@ class Command(BaseCommand): is_finale=False, ) Memory.objects.create( - story_order=90, + story_order=20260520, date=date(2026, 5, 20), event_title="心墙与窗 · 终章", main_text=( diff --git a/backend/journal/models.py b/backend/journal/models.py index 52419e7..e262889 100644 --- a/backend/journal/models.py +++ b/backend/journal/models.py @@ -5,9 +5,13 @@ class Memory(models.Model): """恋爱故事页,驱动前端尼泊尔本版式。""" class FeatureType(models.TextChoices): + FIRST_MEET = "first_meet", "初见·抖音相识" + FIRST_MEET_JU = "first_meet_ju", "初见·集电院" + FIRST_MEET_RUI = "first_meet_rui", "初见·瑞幸咖啡" HEART_WINDOW = "heart_window", "心窗页" FISSURE_PAGE = "fissure_page", "裂缝对开页" STANDARD_NEPAL = "standard_nepal", "标准尼泊尔页" + FIRST_MEET_TRAIN = "first_meet_train", "初见·高铁遇见" class NepalArtStyle(models.TextChoices): """每页可选不同尼泊尔视觉皮肤(备用可继续加枚举)。""" diff --git a/backend/journal/readme.md b/backend/journal/readme.md new file mode 100644 index 0000000..4e65a5e --- /dev/null +++ b/backend/journal/readme.md @@ -0,0 +1,97 @@ +# 手账站开发与运行 + +## 访问地址 + +| 环境 | 手账站 | Django Admin | +|------|--------|----------------| +| 本地开发 | http://localhost:5173 | http://localhost:8000/admin/ | +| Docker | http://localhost:8080 | http://localhost:8000/admin/ | + +--- + +## 本地开发(推荐) + +前后端各开一个终端。前端 Vite 会把 `/api`、`/media` 代理到 `http://127.0.0.1:8000`,需先启动后端。 + +### 后端(Django) + +在项目根目录 `mwy` 下: + +```powershell +cd backend +python -m venv .venv +.\.venv\Scripts\Activate.ps1 +pip install -r requirements.txt +python manage.py migrate +python manage.py runserver +``` + +首次使用 Admin 可创建超级用户: + +```powershell +python manage.py createsuperuser +``` + +导入示例时间线数据(会清空现有 `Memory` 记录): + +```powershell +python manage.py seed_nepal_story +``` + +### 前端(Vue + Vite) + +另开终端,在项目根目录下: + +```powershell +cd frontend +npm install +npm run dev +``` + +浏览器打开 Vite 提示的地址(默认 http://localhost:5173)。 + +可选:指定 API 地址(一般不必,默认走代理 `/api`) + +```powershell +# .env 或 .env.local +# VITE_API_BASE_URL=http://127.0.0.1:8000/api +``` + +### 生产构建预览(可选) + +```powershell +cd frontend +npm run build +npm run preview +``` + +--- + +## Docker 一键启动 + +在项目根目录: + +```powershell +docker compose up --build +``` + +- 手账站:http://localhost:8080 +- Admin:http://localhost:8000/admin/ + +数据与媒体挂在 Docker 卷 `backend_data`(SQLite、`media`)。 + +--- + +## 常用命令速查 + +```powershell +# 后端目录 backend/ 下,且已激活虚拟环境 +python manage.py migrate +python manage.py runserver +python manage.py seed_nepal_story +python manage.py createsuperuser + +# 前端目录 frontend/ 下 +npm run dev +npm run build +``` diff --git a/backend/journal/url b/backend/journal/url deleted file mode 100644 index 9f52269..0000000 --- a/backend/journal/url +++ /dev/null @@ -1,4 +0,0 @@ -手账站:http://localhost:8080 -Admin:http://localhost:8000/admin/ - -http://localhost:5173/ \ No newline at end of file