使用导入导出模块 Django 从 csv 为用户创建用户登录名和密码

问题描述

我想使用导入导出模块 Django 的 CSV 文件创建一个新用户登录名和随机/相同的密码。我已经尝试了很多例子,但没有用。你能提出什么建议吗?我什至尝试在导入 csv 文件中创建密码字段。让我知道您可以分享的任何教程/链接来实现这一目标。

解决方法

如果您想用虚拟数据填充数据库,python 中有一个名为 faker 的模块。 这是一个小代码片段,展示了如何使用 faker:

import os
# Configure settings for project
# Need to run this before calling models from application!
os.environ.setdefault('DJANGO_SETTINGS_MODULE','(YOUR DJANGO PROJECT).settings')

import django
# Import settings
django.setup()

import random
from (YOUR DJANGO APP).models import User
from faker import Faker

fakegen = Faker()

def populate(N=5):

    for entry in range(N):

        # Create Fake Data for entry
        fake_name = fakegen.name().split()
        fake_first_name = fake_name[0]
        fake_last_name = fake_name[1]
        fake_email = fakegen.email()

        # Create new User Entry
        user = User.objects.get_or_create(first_name=fake_first_name,last_name=fake_last_name,email=fake_email)[0]


if __name__ == '__main__':
    print("Populating the databases...")
    populate(20)
    print('Populating Complete')
,

django-import-export 包含 several hooks,您可以使用它在插入数据库之前操作数据。这似乎是为每个用户生成随机密码的理想方式。

您可以将其与 Django 的 make_random_password() 函数结合使用。在导入电子表格中设置密码似乎不是一个好主意,但您可能出于某种原因需要这样做。

您需要创建自己的资源子类,并覆盖 before_save_instance(),例如:

class UserResource(resources.ModelResource):

    def before_save_instance(self,instance,using_transactions,dry_run):
        pw = User.objects.make_random_password()
        instance.set_password(pw)

    class Meta:
        model = User
        fields = ('id','username','password')
        import_id_fields = ['id']