Files
tech-blog/init_data.py
hz4th_coder e689fed71e 初始化技术博客项目
功能特性:
- 前端文章展示 (Markdown渲染、代码高亮)
- 后台管理系统 (文章、分类、标签、作者管理)
- 图片上传 (点击、拖拽、粘贴)
- 网站设置 (Logo、底部宣传图片上传)
- 访问统计 (IP记录、趋势图表)
- 参考来源、附件支持
- 单端口部署 (16012)

技术栈:
- Flask 3.0 + SQLAlchemy
- SQLite数据库
- marked.js + highlight.js (Markdown渲染)
- Chart.js (统计图表)
2026-06-04 23:12:34 +08:00

174 lines
4.7 KiB
Python

"""初始化示例数据"""
from app import create_app, db
from app.models import Article, Category, Tag, Admin
from app.services import CategoryService, TagService, ArticleService, AdminService
from werkzeug.security import generate_password_hash
def init_sample_data():
"""创建示例数据"""
app = create_app('development')
with app.app_context():
# 创建数据库表
db.create_all()
# 创建管理员
admin = Admin.query.filter_by(username='admin').first()
if not admin:
admin = Admin(username='admin', email='admin@example.com')
admin.set_password('admin123')
db.session.add(admin)
print('创建管理员: admin / admin123')
# 创建分类
categories_data = [
('Python', 'Python 编程相关技术文章'),
('JavaScript', 'JavaScript 前端开发技术'),
('数据库', '数据库技术与实践'),
('系统架构', '系统设计与架构相关'),
]
for name, desc in categories_data:
cat = Category.query.filter_by(name=name).first()
if not cat:
CategoryService.create(name=name, description=desc)
print(f'创建分类: {name}')
# 创建标签
tags_data = [
('Flask', '#3498db'),
('Vue', '#42b883'),
('Django', '#092e20'),
('React', '#61dafb'),
('MySQL', '#00758f'),
('PostgreSQL', '#336791'),
('微服务', '#ff6b6b'),
('Docker', '#2496ed'),
]
for name, color in tags_data:
tag = Tag.query.filter_by(name=name).first()
if not tag:
TagService.create(name=name, color=color)
print(f'创建标签: {name}')
# 创建示例文章
python_cat = Category.query.filter_by(name='Python').first()
flask_tag = Tag.query.filter_by(name='Flask').first()
articles_data = [
{
'title': 'Flask 项目架构最佳实践',
'content': '''# Flask 项目架构最佳实践
## 项目结构
合理的项目结构是可维护性的基础:
```
project/
├── app/
│ ├── models/
│ ├── routes/
│ ├── services/
│ └── templates/
├── migrations/
└── tests/
```
## 分层设计
- **Models**:数据模型定义
- **Services**:业务逻辑处理
- **Routes**:路由控制器
## 为什么这样设计?
1. **关注点分离**:每层只处理自己的职责
2. **易于测试**:业务逻辑与路由解耦
3. **便于扩展**:新增功能不会影响现有结构
```python
# 示例代码
class ArticleService:
@staticmethod
def get_published_list(page=1):
return Article.query.filter_by(is_published=True).paginate(page=page)
```
## 总结
好的架构设计能让代码更清晰、更易维护。
''',
'category_id': python_cat.id,
'is_published': True
},
{
'title': 'Python 数据处理技巧',
'content': '''# Python 数据处理技巧
## 列表推导式
简洁高效的数据处理方式:
```python
# 传统方式
result = []
for item in items:
result.append(item * 2)
# 推导式
result = [item * 2 for item in items]
```
## 字典操作技巧
```python
# 合并字典
dict1 = {'a': 1}
dict2 = {'b': 2}
merged = {**dict1, **dict2}
# defaultdict
from collections import defaultdict
d = defaultdict(list)
d['key'].append('value')
```
## 性能优化
- 使用生成器节省内存
- 选择合适的数据结构
- 避免不必要的循环
## 总结
掌握这些技巧能大幅提升代码效率。
''',
'category_id': python_cat.id,
'is_published': True
},
]
for article_data in articles_data:
existing = Article.query.filter_by(title=article_data['title']).first()
if not existing:
ArticleService.create(
title=article_data['title'],
content=article_data['content'],
category_id=article_data.get('category_id'),
tag_ids=[flask_tag.id] if flask_tag else [],
is_published=article_data.get('is_published', False)
)
print(f'创建文章: {article_data["title"]}')
db.session.commit()
print('\n初始化完成!')
print('访问地址:')
print(' 前端: http://localhost:16012/')
print(' 后台: http://localhost:16012/admin/login')
print(' 账号: admin / admin123')
if __name__ == '__main__':
init_sample_data()