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\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.

 

再次訪問頁面,首頁會顯示一個很長的留言列表,根據創建的隨機日期排序,最先發表的排在上面

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM