Files
zjpb.net/migrations/fix_empty_slugs.py
Jowe 9e47ebe749 release: v2.0 - 完整功能管理系统
主要功能:
- 完整的Flask-Admin后台管理系统
- 网站/标签/新闻管理功能
- 用户登录认证系统
- 科技感/未来风UI设计
- 标签分类系统(取代传统分类)
- 详情页面展示
- 数据库迁移脚本
- 书签导入解析工具

技术栈:
- Flask + SQLAlchemy
- Flask-Admin管理界面
- Bootstrap 4响应式设计
- 用户认证与权限管理

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-28 19:21:17 +08:00

74 lines
2.2 KiB
Python
Raw Permalink 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.
"""修复空slug的迁移脚本"""
import sys
import os
import re
# 添加项目根目录到系统路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from app import create_app
from models import db, Site
from datetime import datetime
from pypinyin import lazy_pinyin
# 创建应用上下文
app = create_app()
def generate_slug(name, site_id=None):
"""从名称生成slug"""
# 将中文转换为拼音
slug = ''.join(lazy_pinyin(name))
# 转换为小写,移除特殊字符
slug = slug.lower()
slug = re.sub(r'[^\w\s-]', '', slug)
slug = re.sub(r'[-\s]+', '-', slug).strip('-')
# 如果转换后为空使用ID或时间戳
if not slug:
if site_id:
slug = f"site-{site_id}"
else:
slug = f"site-{datetime.now().strftime('%Y%m%d%H%M%S')}"
# 确保slug唯一
base_slug = slug
counter = 1
while Site.query.filter(Site.slug == slug, Site.id != site_id).first():
slug = f"{base_slug}-{counter}"
counter += 1
return slug
with app.app_context():
try:
# 查找所有slug为空或包含乱码的网站
all_sites = Site.query.all()
sites_to_fix = []
for site in all_sites:
# 检查slug是否为空、None、或包含乱码
if (not site.slug or
site.slug == 'None' or
site.slug.strip() == '' or
any(ord(char) > 127 and not char.isalpha() for char in site.slug)):
sites_to_fix.append(site)
if not sites_to_fix:
print("No sites to fix. All good!")
else:
print(f"Found {len(sites_to_fix)} sites to fix...")
for site in sites_to_fix:
old_slug = site.slug
site.slug = generate_slug(site.name, site.id)
print(f" - Site #{site.id} '{site.name}': '{old_slug}' -> '{site.slug}'")
db.session.commit()
print(f"Successfully fixed {len(sites_to_fix)} sites!")
except Exception as e:
print(f"Migration failed: {str(e)}")
import traceback
traceback.print_exc()
db.session.rollback()