跳转到主要内容

Django-faker使用python-faker为Django模型和模板生成测试数据。

项目描述

Django-faker 使用 PyFaker 为Django模型和模板生成测试数据。

如何使用

要安装Django-faker,您可以使用pip

pip install django-faker

配置

在django应用的 settings.py 文件中

INSTALLED_APPS = (

    # ...
    'django_faker',
)

FAKER_LOCALE = None     # settings.LANGUAGE_CODE is loaded
FAKER_PROVIDERS = None  # faker.DEFAULT_PROVIDERS is loaded (all)

填充Django模型

Django-faker 为Django模型提供适配器,以方便测试数据库的填充。要使用模型实例填充,创建一个新的Populator类,然后列出必须生成的所有模型的类和数量。要启动实际的数据填充,调用 execute() 方法。

以下是一个示例,说明如何填充5个 Game 和10个 Player 对象

from django_faker import Faker
# this Populator is only a function thats return a django_faker.populator.Populator instance
# correctly initialized with a faker.generator.Generator instance, configured as above
populator = Faker.getPopulator()

from myapp.models import Game, Player
populator.addEntity(Game,5)
populator.addEntity(Player,10)

insertedPks = populator.execute()

填充器使用名称和列类型猜测器来为每个列填充相关数据。例如,Django-faker使用 firstName 格式化器填充名为 first_name 的列,并使用 dateTime 填充具有 datetime 实例的列。因此,生成的实体是连贯的。如果Django-faker误解释了列名,您仍然可以使用 addEntity() 的第三个参数指定用于填充特定列的自定义函数。

populator.addEntity(Player, 10, {
    'score':    lambda x: populator.generator.randomInt(0,1000),
    'nickname': lambda x: populator.generator.email(),
})
populator.execute()

当然,Django-faker不填充自增主键。此外,django_faker.populator.Populator.execute() 返回按类索引的插入PK列表。

print insertedPks
{
    <class 'faker.django.tests.Player'>: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    <class 'faker.django.tests.Game'>: [1, 2, 3, 4, 5]
}

在上一个示例中,PlayerGame 模型之间存在关联。由于首先填充 Game 实体,Faker 足够智能,能够将已填充的 Player 实体关联到其中一个已填充的 Game 实体。

模板标签和过滤器

Django-faker 提供了用于与 PyFaker 交互的有用模板标签和过滤器。

{% fake 'name' as myname %}{% fake 'dateTimeBetween' '-10d' as mydate %}

{{ myname|title }} - {{ mydate|date:"M Y" }}



{% load fakers %}

<?xml version="1.0" encoding="UTF-8"?>
<contacts>
    {% fake 'randomInt' 10 20 as times %}
    {% for i in 10|get_range %}
    <contact firstName="{% fakestr 'firstName' %}" lastName="{% fakestr 'lastName' %}" email="{% fakestr 'email' %}"/>
        <phone number="{% fakestr 'phoneNumber' %}"/>
        {% if 'boolean'|fake:25 %}
        <birth date="{{ 'dateTimeThisCentury'|fake|date:"D d M Y" }}" place="{% fakestr 'city' %}"/>
        {% endif %}
        <address>
            <street>{% fakestr 'streetAddress' %}</street>
            <city>{% fakestr 'city' %}</city>
            <postcode>{% fakestr 'postcode' %}</postcode>
            <state>{% fakestr 'state' %}</state>
        </address>
        <company name="{% fakestr 'company' %}" catchPhrase="{% fakestr 'catchPhrase' %}">
        {% if 'boolean'|fake:25 %}
            <offer>{% fakestr 'bs' %}</offer>
        {% endif %}
        {% if 'boolean'|fake:33 %}
            <director name="{% fakestr 'name' %}" />
        {% endif %}
        </company>
        {% if 'boolean'|fake:15 %}
        <details>
        <![CDATA[
        {% fakestr 'text' 500 %}
        ]]>
        </details>
        {% endif %}
    </contact>
    {% endfor %}
</contacts>

页面预览

在您的应用程序主目录中打开 url.py 并添加此 URL

urlpatterns = patterns('',
    ...
    url(r'', include('django_faker.urls')),
    ...
)

http://127.0.0.1:8000/preview/ 显示一个伪造的浏览器窗口,适用于截图。

运行测试

在 django 环境中运行 django 测试

$ python runtests.py

或者如果您在 INSTALLED_APPS 中有 'django_faker'

$ python manage.py test django_faker

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

django-faker-0.2.tar.gz (9.6 kB 查看哈希值)

上传时间

由以下支持