Masonite 熟悉步骤小记录 (八、数据工厂)
seed 体验
首先在项目里可以看到 masonite 默认准备的一个 seeder,位于 masapp/databases/seeds/user_table_seeder.py
,这个 seeder.py 是这样写的:
from orator.seeds import Seeder
from app.User import User
from config.factories import factory
class UserTableSeeder(Seeder):
def run(self):
factory(User, 50).create()
可以看到这个 seeder 引入了 masapp/config/factories.py
模块的 factory
类:
from orator.orm import Factory
from app.User import User
factory = Factory()
def users_factory(faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': '$2b$12$WMgb5Re1NqUr.uSRfQmPQeeGWudk/8/aNbVMpD1dR.Et83vfL8WAu', # == 'secret'
}
factory.register(User, users_factory)
现在可以使用命令播种数据了:
(env) $ craft seed:run
自制 seeder
准备一个模型和数据表:
(env) $ craft model Todo
(env) $ craft migration create_todos_table --create todos
对这个新的 migration 数据表文件 masapp/databases/migrations/2020_06_07_114541_create_todos_table.py
进行添加字段的编写:
table.string('name')
table.text('description')
table.integer('user_id').unsigned()
table.foreign('user_id').references('id').on('users')
首先在 masapp/config/factories.py
这个工厂模块中添加:
from app.Todo import Todo
import random
def todos_factory(faker):
return {
'name': faker.name(),
'description': faker.paragraph(),
'user_id': random.randint(1, 50)
}
factoru.register(Todo, todos_factory)
然后生成 masapp/databases/seeds/todo_table_seeder.py
:
(env) $ craft seed Todo
from orator.seeds import Seeder
class TodoTableSeeder(Seeder):
def run(self):
pass
对这个 seeder 进行一些设定:
from orator.seeds import Seeder
from app.Todo import Todo
from config.factories import factory
class TodoTableSeeder(Seeder):
def run(self):
factory(Todo, 50).create()
把原来的 masapp/databases/seeds/database_seeder.py
:
from orator.seeds import Seeder
from .user_table_seeder import UserTableSeeder
class DatabaseSeeder(Seeder):
def run(self):
self.call(UserTableSeeder)
添加新编写的 seeder:
from orator.seeds import Seeder
from .user_table_seeder import UserTableSeeder
from .todo_table_seeder import UserTableSeeder
class DatabaseSeeder(Seeder):
def run(self):
self.call(UserTableSeeder)
self.call(TodoTableSeeder)
之后可以回滚迁移:
(env) $ craft migrate:refresh -s
本作品采用《CC 协议》,转载必须注明作者和本文链接