Django 博客 - 3 生成测试数据

前言

在上一篇文章中介绍,我们可以在python manage.py shell或者后台管理界面里创建博客,但是如果要创建大量博客来测试博客应用的时候,这两个方法就太麻烦了,所以可以编写一个函数来生成测试数据,同时编写一个django-admin命令来调用这个函数,就可以通过python manage.py <command-name>来调用了。

编写生成数据的函数

首先先清除数据库中的Tag、Category和Post,然后再次创建,下面这个函数就是生成100篇Post。

def fake_data():
    #删除所有数据
    Tag.objects.all().delete()
    Category.objects.all().delete()
    Post.objects.all().delete()

    #获取第一个用户,当前只有一个超级用户
    user = User.objects.all().first()

    #创建标签
    tag = ('django', 'python', 'java', 'javascript', 'css', 'html', 'web', 'app')
    tags = []
    for t in tag:
        tags.append(Tag.objects.create(name=t))
    #随机挑选1到5个标签
    def random_tags():
        return random.sample(tags, random.randint(1, 5))
    #创建类别
    category = ('python教程', 'django教程', 'android教程', 'java教程')
    categories = []
    for c in category:
        categories.append(Category.objects.create(name=c))
    #随机挑选一个类别
    def random_category():
        return random.choice(categories)
    #随机datetime
    def random_datetime():
        return datetime.datetime(random.randint(2015, 2017),  # year
                                 random.randint(1, 12),  # month
                                 random.randint(1, 28),  # day
                                 random.randint(0, 23),  # hour
                                 random.randint(0, 59),  # min
                                 random.randint(0, 59),  # sec
                                 random.randint(0, 100),  # microsecond
                                 timezone.utc if settings.USE_TZ else None)
    #创建100篇博客
    for i in range(0, 100):
        post = Post.objects.create(title="title %s" % i, excerpt="summary %s" % i, body="content %s" % i, author=user, category=random_category(), created_time=random_datetime())
        post.tags.add(*random_tags())

有了这个函数之后,直接在命令行里调用也行,但是太麻烦了。所以接下来编写一个django-admin命令来调用它。

编写命令

怎么编写django-admin命令可以查看官方文档 Writing custom django-admin commands

blog目录下,创建management/commands目录,在management/commands目录里新建一个fake_data.py,这个文件名就是命令名字。
此时blog目录下类似

blog/
    __init__.py
    models.py
    management/
        __init__.py
        commands/
            __init__.py
            fake_data.py
    tests.py
    views.py

编写django-admin命令,最重要的是继承BaseCommand类,在handle方法里直接调用fake_data函数就可以了

from django.core.management.base import BaseCommand

class Command(BaseCommand):
    help = 'Import init data for test'

    def handle(self, *args, **options):
        self.stdout.write(self.style.SUCCESS('begin import'))
        fake_data()
        self.stdout.write(self.style.SUCCESS('end import'))

测试

执行python manage.py,可以看到多了一个fake_data的命令

...
[blog]
    fake_data

执行python manage.py fake_data,再去后台管理网站查看,会发现生成了100篇博客。接下来就可以用这些数据来测试我们的博客应用了。

本文相关源码

猜你喜欢

转载自blog.csdn.net/abc_1234d/article/details/78303161
今日推荐