379 lines
11 KiB
Python
379 lines
11 KiB
Python
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)} 篇)'
|
||
)
|
||
)
|