导入用户


在搭建edX的时候,可能面临一个这样的需求:批量导入学生作为用户。
edX默认的注册方式是邮件注册。
而校方的数据库中邮箱很可能是无效的,所以我们使用学号作为用户名。密码也默认设为学号。

在此给出一个可行的解决方案。

大体思路

  • 从校方数据库中导出用户文件(csv格式)
  • 写脚本从csv文件中取得所需的字段(诸如学号,姓名)
  • 进入edx shell环境,执行写好的用户导入脚本

实施细节

我们假设从数据库导出的文件student.csv 如下

姓名 , 学号 , 专业 , 班级
张三 , 201011, 热能动力工程,动力1007班
李四 , 201012, 热能动力工程,动力1008班
王五 , 201013, 热能动力工程,动力1009班
...

写好脚本

cd /tmp
mkdir userImportTooldir
cd userImportToolDir

将从数据库导出的student.csv上传到userImportToolDir目录里,

在当前目录新建user_import_tool.py内容为

#coding=utf-8
import unicodecsv
from django.contrib.auth.models import User
from student.models import UserProfile, Registration
from django.core.exceptions import ObjectDoesNotExist

filename = './student.csv'
f = open(filename)
r=unicodecsv.reader(f, encoding='utf-8')


def create_student_user(username,password,email,name):
        '''
        - username 用户在edx中的用户名,使用student.csv中的学号
        - password 用户在edx中的初始密码,使用student.csv中的学号
        - email 用户在edx中的邮箱(必填),使用username+"@example.com" ,登录后可修改
        - name: 用户的实际名字
        '''
        user = User(username=username,
                email=email,
                is_active=True)
        user.set_password(password)
        registration = Registration()
        user.save()
        registration.register(user)
        profile = UserProfile(user=user)
        profile.name = name
        profile.save()
i = 0
for row in r :
        if i == 0:
            continue   #csv的第一行是头部,跳过
        #print "name:%s,student_id:%s"%(row[0],row[1])
        username = row[1] #student_id
        password = row[1]
        email = username+"@example.com"
        name = row[0]
        try:
            user_live = User.objects.get(username=username)
        except ObjectDoesNotExist:
            create_student_user(username,password,email,name)
       i=i+1
print "ok~"

测试显示,8000名学生的话,大约需要导入十几分钟

安装依赖

sudo -H -u edxapp bash
source /edx/app/edxapp/edxapp_env
pip install unicodecsv

开始导入

cd /tmp/userImportTool
sudo -u www-data /edx/bin/python.edxapp /edx/app/edxapp/edx-platform/manage.py lms --settings aws shell   #进入edX shell环境
import  sys
sys.path.append("./")
import  user_import_tool

开始使用

在/login中使用email和password登录即可。

对于不想使用这种登录方式的,可以自己来写用户认证,诸如使用username和password登录之类的

后记

文中我们创建用户使用的是python代码。

此外创建用户edX也可以用shell指令,对于写shell脚本的同学可能有用

长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn