Files
chunyu_project/article/management/commands/seed_articles.py
T
2026-08-05 23:59:15 +08:00

379 lines
11 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.
from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from article.models import Article
User = get_user_model()
class Command(BaseCommand):
help = '初始化文章种子数据'
def handle(self, *args, **options):
admin = User.objects.filter(is_superuser=True).first()
if not admin:
admin = User.objects.first()
if not admin:
self.stdout.write(self.style.ERROR('未找到任何用户,请先创建用户'))
return
articles_data = [
{
'title': 'Python 异步编程指南:从 asyncio 到实战应用',
'excerpt': '深入理解 Python 异步编程的核心概念,掌握 asyncio 库的使用方法,通过实战案例提升编程技能。',
'category': 'tech',
'tags': ['Python', 'asyncio', '异步编程'],
'cover_image': 'https://images.unsplash.com/photo-1526379095098-d400fd0bf935?w=800&h=400&fit=crop',
'content': '''
# Python 异步编程指南
异步编程是现代软件开发中的重要技能,特别是在处理 I/O 密集型任务时。Python 通过 `asyncio` 库提供了强大的异步编程支持。
## 什么是异步编程?
异步编程是一种并发编程范式,允许程序在等待 I/O 操作完成时执行其他任务,而不是阻塞等待。
### 核心概念
- **协程(Coroutine)**:使用 `async def` 定义的函数,可以在执行过程中暂停和恢复
- **事件循环(Event Loop)**:调度和执行协程的核心机制
- **任务(Task)**:协程的包装器,用于在事件循环中调度执行
## asyncio 基础
```python
import asyncio
async def hello():
print("Hello")
await asyncio.sleep(1)
print("World")
asyncio.run(hello())
```
## 实战应用
异步编程广泛应用于 Web 爬虫、API 开发、数据处理等场景。
''',
},
{
'title': 'Vue 3 组合式 API 最佳实践',
'excerpt': '全面介绍 Vue 3 组合式 API 的使用技巧和最佳实践,帮助你构建更可维护的 Vue 应用。',
'category': 'tech',
'tags': ['Vue', 'JavaScript', '前端'],
'cover_image': 'https://images.unsplash.com/photo-1555066931-4365d14bab8c?w=800&h=400&fit=crop',
'content': '''
# Vue 3 组合式 API 最佳实践
Vue 3 的组合式 API(Composition API)为我们提供了更灵活的代码组织方式。
## setup 函数
组合式 API 的核心是 `setup` 函数,它是组件逻辑的入口点。
```javascript
import { ref, computed, onMounted } from 'vue'
export default {
setup() {
const count = ref(0)
const doubled = computed(() => count.value * 2)
onMounted(() => {
console.log('Component mounted')
})
return { count, doubled }
}
}
```
## 响应式基础
- **ref()**:创建响应式引用
- **reactive()**:创建响应式对象
- **computed()**:创建计算属性
## 生命周期钩子
在组合式 API 中使用 `onMounted`、`onUpdated` 等钩子函数。
''',
},
{
'title': '深入理解 TypeScript 类型系统',
'excerpt': '探索 TypeScript 高级类型特性,包括泛型、条件类型、映射类型等,提升代码的类型安全性。',
'category': 'tech',
'tags': ['TypeScript', '类型系统', '前端'],
'cover_image': 'https://images.unsplash.com/photo-1516116216624-53e697fedbea?w=800&h=400&fit=crop',
'content': '''
# 深入理解 TypeScript 类型系统
TypeScript 的类型系统是其最强大的特性之一,它帮助我们在开发阶段捕获错误。
## 泛型(Generics)
泛型允许我们创建可重用的组件,支持多种类型。
```typescript
function identity<T>(arg: T): T {
return arg
}
const result = identity<string>("hello")
```
## 条件类型
条件类型允许我们根据条件选择不同的类型。
```typescript
type IsString<T> = T extends string ? true : false
type A = IsString<string> // true
type B = IsString<number> // false
```
## 映射类型
映射类型可以基于旧类型创建新类型。
```typescript
type Readonly<T> = {
readonly [P in keyof T]: T[P]
}
''',
},
{
'title': 'UI 设计原则:打造用户友好的界面',
'excerpt': '学习 UI 设计的核心原则,包括一致性、层次感、对比度等,创建美观且易用的产品界面。',
'category': 'design',
'tags': ['UI设计', '用户体验', '设计原则'],
'cover_image': 'https://images.unsplash.com/photo-1561070791-2526d30994b5?w=800&h=400&fit=crop',
'content': '''
# UI 设计原则
优秀的 UI 设计不仅要美观,更要易用。以下是核心设计原则:
## 一致性(Consistency)
保持设计元素的一致性,包括:
- 颜色方案
- 字体选择
- 按钮样式
- 间距规范
## 层次感(Hierarchy)
通过大小、颜色、位置等元素建立视觉层次,引导用户注意力。
## 对比度(Contrast)
适当的对比度可以:
- 提高可读性
- 突出重点内容
- 增强视觉冲击
## 留白(Whitespace)
合理使用留白可以让界面更清爽,提升阅读体验。
## 反馈(Feedback)
为用户的操作提供即时反馈,增强交互体验。
''',
},
{
'title': '高效开发者的 10 个工作习惯',
'excerpt': '分享提升开发效率的实用习惯,包括代码管理、调试技巧、时间管理等。',
'category': 'productivity',
'tags': ['效率', '开发习惯', '时间管理'],
'cover_image': 'https://images.unsplash.com/photo-1484480974693-6ca0a78fb36b?w=800&h=400&fit=crop',
'content': '''
# 高效开发者的 10 个工作习惯
成为高效开发者不仅需要技术能力,更需要良好的工作习惯。
## 1. 每日规划
每天开始工作前,花 10 分钟规划当天的任务优先级。
## 2. 番茄工作法
使用番茄工作法保持专注:
- 25 分钟专注工作
- 5 分钟休息
- 每 4 个番茄钟后休息 15-30 分钟
## 3. 代码审查
养成代码审查的习惯,既能学习他人代码,也能提高代码质量。
## 4. 持续学习
每天抽出时间学习新技术,保持技术敏感度。
## 5. 文档化
及时记录重要信息和解决方案,建立个人知识库。
## 6. 自动化
将重复性工作自动化,节省时间和精力。
## 7. 健康生活
保持规律的作息和运动,健康的身体是高效工作的基础。
''',
},
{
'title': '2026 年前端技术趋势展望',
'excerpt': '分析 2026 年前端技术的发展趋势,包括框架演进、工具链变化、新兴技术等。',
'category': 'industry',
'tags': ['前端趋势', '技术发展', '行业洞察'],
'cover_image': 'https://images.unsplash.com/photo-1451187580459-43490279c0fa?w=800&h=400&fit=crop',
'content': '''
# 2026 年前端技术趋势展望
前端技术发展迅速,让我们一起看看 2026 年的技术趋势:
## 框架演进
- **React 19+**:服务器组件、并发特性更加成熟
- **Vue 3.5+**:性能优化、组合式 API 增强
- **Svelte 5**:运行时性能持续提升
## 构建工具
- **Vite**:成为主流构建工具
- **Turbopack**:Rust 构建工具持续发力
- **Lightning CSS**:CSS 处理速度大幅提升
## 新兴技术
- **AI 辅助开发**:Copilot 等工具深度集成
- **WebAssembly**:更多场景落地
- **边缘计算**:前端与边缘计算融合
## 开发体验
- **HMR**:热更新速度更快
- **类型安全**:TypeScript 成为标配
- **低代码**:可视化开发工具发展
作为开发者,保持学习热情,紧跟技术潮流。
''',
},
{
'title': 'Django REST Framework 最佳实践',
'excerpt': '掌握 Django REST Framework 的高级用法,构建健壮的 RESTful API。',
'category': 'tech',
'tags': ['Django', 'DRF', '后端'],
'cover_image': 'https://images.unsplash.com/photo-1555949963-aa79dcee981c?w=800&h=400&fit=crop',
'content': '''
# Django REST Framework 最佳实践
DRF 是 Django 生态中最强大的 API 开发框架。
## 序列化器(Serializer)
```python
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username', 'email']
```
## 视图集(ViewSet)
使用 ViewSet 可以快速构建 CRUD API:
```python
from rest_framework import viewsets
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
```
## 权限控制
DRF 提供多种权限类:
- `AllowAny`:任何人可访问
- `IsAuthenticated`:仅登录用户
- `IsAdminUser`:仅管理员
## 分页
使用 PageNumberPagination 或 CursorPagination 处理大数据集。
''',
},
{
'title': 'CSS Grid 布局完全指南',
'excerpt': '从基础到高级,全面掌握 CSS Grid 布局,创建复杂的响应式页面布局。',
'category': 'tech',
'tags': ['CSS', 'Grid', '布局'],
'cover_image': 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=800&h=400&fit=crop',
'content': '''
# CSS Grid 布局完全指南
CSS Grid 是一个强大的二维布局系统,让页面布局变得简单直观。
## 基础概念
- **Grid Container**:网格容器
- **Grid Item**:网格项
- **Grid Track**:网格轨道
- **Grid Cell**:网格单元格
- **Grid Area**:网格区域
## 容器属性
```css
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: auto;
gap: 20px;
}
```
## 响应式 Grid
```css
.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
```
## 对齐方式
- `justify-items`:水平对齐
- `align-items`:垂直对齐
- `place-items`:简写属性
''',
},
]
created_count = 0
for article_data in articles_data:
article_data['author'] = admin
article_data['status'] = 'published'
article_data.setdefault('is_featured', False)
article_data.setdefault('is_top', False)
article, created = Article.objects.update_or_create(
title=article_data['title'],
defaults=article_data
)
if created:
created_count += 1
self.stdout.write(
self.style.SUCCESS(
f'成功创建 {created_count} 篇文章(共 {len(articles_data)} 篇)'
)
)