功能特性: - 前端文章展示 (Markdown渲染、代码高亮) - 后台管理系统 (文章、分类、标签、作者管理) - 图片上传 (点击、拖拽、粘贴) - 网站设置 (Logo、底部宣传图片上传) - 访问统计 (IP记录、趋势图表) - 参考来源、附件支持 - 单端口部署 (16012) 技术栈: - Flask 3.0 + SQLAlchemy - SQLite数据库 - marked.js + highlight.js (Markdown渲染) - Chart.js (统计图表)
174 lines
4.7 KiB
Python
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() |