Flask实战-留言板-使用Faker生成虚拟数据

使用Faker生成虚拟数据

创建虚拟数据是编写Web程序时的常见需求。在简单的场景下,我们可以手动创建一些虚拟数据,但更方便的选择是使用第三方库实现。流行的python虚拟数据生成工具有Mimesis和Faker,后者同时支持python2和python3,而且文档中包含丰富的示例,所以这里选用Faker。首先用pipenv安装(使用—dev选项声明为开发依赖):pipenv install faker --dev

Flask实战-留言板-使用Faker生成虚拟数据

 

Faker内置了20多类虚拟数据,包括姓名、地址、网络账号、信用卡、时间、职位、公司名称、Python数据等。要生成虚拟数据,首先要实例化Faker类,创建一个fake对象作为虚拟数据生成器:

>>> from faker import Faker
>>> fake = Faker()

这个fake对象可以使用分别对应所有虚拟数据类别的方法来获取虚拟数据,比如name、address、text等,每次调用都会获得不同的随机结果,一些基本的实例如下所示:

>>> from faker import Faker
>>> fake = Faker()
>>> fake.name()
u'Shane Schmidt'
>>> fake.address()
u'5327 Mcintosh Knolls\nScottshire, SC 42652'
>>> fake.text()
u'Before least case never process financial upon instead.'
>>> fake.text()
u'Including wait dog she. Idea husband heart really executive safe option. Step save point quality citizen may.\nAir full name sea. Very matter camera public most.'

 

默认的虚拟数据语言为英文,如果你想获取其他语言的虚拟数据,可以在实例化Faker类时传入区域字符作为第一个参数(locale)来指定:

fake = Faker(‘zh_CN’)

 

在Faker中,简体中文和繁体中文对应的区域字符串分别为zn_CN和zh_TW.

下面示例中,用Faker实现了一个生成虚拟留言数据的命令函数fake。

 

messageBoard/messageBoard/commands.py:

@app.cli.command()
@click.option('--count', default=20, help='Quantity of messages, default is 20.')
def forge(count):
    """Generate fake messages."""
    from faker import Faker

    db.drop_all()
    db.create_all()

    fake = Faker()
    click.echo('Working...')

    for i in range(count):
        message = Message(
            name = fake.name(),
            body = fake.sentence(),
            timestamp = fake.date_time_this_year()
        )
        db.session.add(message)

    db.session.commit()
    click.echo('Created %d fake messages.' % count)

 

使用for循环操作数据库时,为了提高效率,我们只需要在for循环结束后调用一次db.session.commit()方法提交数据库会话。

 

在这个命令函数前,我们使用click提供的option装饰器为命令添加数量选项—count,使用default关键字将默认值设为20。

 

为了方便测试,生成虚拟数据前会删除重建数据库表。我们分别调用fake对象的name()、sentence()、date_time_this_year()方法生成虚拟的姓名、留言和时间戳。现在使用下面的命令生成虚拟数据:

 

(messageBoard-0K8c_mmc) D:\flask\messageBoard>flask forge
Working...
Created 20 fake messages.

 

选项—count用来指定生成的留言数量,下面生成了50条虚拟留言:

(messageBoard-0K8c_mmc) D:\flask\messageBoard>flask forge --count=50
Working...
Created 50 fake messages.

 

再次访问页面,首页会显示一个很长的留言列表,根据创建的随机日期排序,最先发表的排在上面

 Flask实战-留言板-使用Faker生成虚拟数据

 

上一篇:【luogu P3620】数据备份(反悔贪心 / 撤回贪心)


下一篇:Java 生成测试字符串的库:Java Faker