zoukankan      html  css  js  c++  java
  • Flask实战-留言板-使用Faker生成虚拟数据 --

    使用Faker生成虚拟数据

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

    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
    Scottshire, 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.
    Air 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:flaskmessageBoard>flask forge
    Working...
    Created 20 fake messages.

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

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

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

     

  • 相关阅读:
    hdu1087Super Jumping! Jumping! Jumping!(dp)
    划分树 hdu4417Super Mario
    poj2240Arbitrage(map+floyd)
    hdu4282A very hard mathematic problem
    hdu1421搬寝室(dp)
    【洛谷P3806】【模板】点分治1
    【CF914E】Palindromes in a Tree
    GDOI2020 游记
    【POJ2296】Map Labeler
    【洛谷P6623】树
  • 原文地址:https://www.cnblogs.com/xiaxiaoxu/p/10780825.html
Copyright © 2011-2022 走看看