0.思路引导
1)为了防止博客首页展示的文章过多以及提升加载速度,可以对文章列表进行分页展示。
2)不过这需要比较多的文章才能达到分页效果,但本地开发时一般都只有几篇测试文章,如果一篇篇手工添加将会非常麻烦。
3)解决方案是我们可以写一个脚本,自动生成任意数量的测试数据。脚本写好后,只需运行脚本就可以往数据库填充大量测试数据。
1.脚本目录结构
在项目根目录下新建scripts 文件夹,并新建__init__.py,fake.py,md.sample三个文件,目录结构如下:
HelloDjango-blog-tutorial\
blog\
blogproject\
...
scripts\
__init__.py
fake.py
md.sample
注意:
1)其中 fake.py 是生成测试数据的脚本;
2)md.sample 是一个纯文本文件,内容是生成用于测试 Markdown 的文本。
2.使用 Faker 快速生成测试数据
博客文章包含丰富的内容元素,例如标题、正文、分类、标签。如果手工输入这些相关元素的文本会非常耗时,我们将借助一个 Python 的第三方库 Faker (造假工厂)来快速生成这些测试用的文本内容。
首先安装 Faker:
$ pipenv install Faker
Faker 通过不同的 Provider 来提供各种不同类型的假数据,我们将在下面的脚本中讲解它的部分用法,完整的用法可以参考其官方文档。
3.批量生成测试数据
文件位置:HelloDjango-blog-tutorial \scropts \fake.py
1)首先,导入一些会用到的模块,然后通过脚本所在文件找到项目根目录,将根目录添加到 Python 的模块搜索路径中,这样在运行脚本时 Python 才能够找到相应的模块并执行;
import os
import pathlib
import random
import sys
from datetime import timedelta
import django
import faker
from django.utils import timezone
# 将项目根目录添加到 Python 的模块搜索路径中
back = os.path.dirname
BASE_DIR = back(back(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
2)设置 DJANGO_SETTINGS_MODULE 环境变量,这将指定 django 启动时使用的配置文件,然后运行 django.setup() 启动 django。这是关键步骤,只有在 django 启动后,我们才能使用 django 的 ORM 系统。django 启动后,就可以导入各个模型,以便创建数据。
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "blogproject.settings.local")
django.setup()
from blog.models import Category, Post, Tag
from comments.models import Comment
from django.contrib.auth.models import User
3)清除旧数据,因此每次运行脚本,都会清除原有数据,然后重新生成。
print('clean database')
Post.objects.all().delete()
Category.objects