文章目录
–更新于:2016-07-13
近期重写这部分,使其成为django management command (在dogwood版本下测试可用)
原因有二,其一是之前所用的功能函数不完备,随着对edx的了解深入,想用更安全的函数来完成批量注册功能,其二是希望做到更好的内聚性
这部分是从我的edx_siteapi抽出的一个功能模块,edx_siteapi项目试图把edx的一些功能变为RESTful api接口(类似canvas做的),供外部系统调用和整合,有兴趣的小伙伴可以关注这个项目
在搭建edX的时候,可能面临一个这样的需求:批量导入学生作为用户。
即便是采用cas注册这个需求可能依旧存在,校内系统可能存有用户课程关系,需要预先导入,所以用户实体需要预先存在系统中,而cas是一种首次登录才注册的机制
有时我们可能需要批量从既有数据库中导入用户,尤其是将Open edX用于SPOC中时
在此给出一个可行的解决方案。
大体思路
- 从校方数据库中导出用户文件(csv格式)
- 写脚本从csv文件中取得所需的字段(诸如学号,姓名)
- 使用
django management command将用户导入系统(利用django management command能调用django上下文的机制,这也是此次更新的主要地方)
##实施细节
我们假设从数据库导出的文件student.csv 如下
|
|
注意逗号前后的空格是有影响的!
###编写脚本
在任意django app目录下创建management/commands/create_user_from_csv.py,先上代码
|
|
测试显示,8000名学生的话,大约需要导入十几分钟(旧版本)
###安装依赖
|
|
###开始导入
sudo -u www-data /edx/bin/python.edxapp /edx/app/edxapp/edx-platform/manage.py lms create_user_from_csv --csv /tmp/student.csv --settings devstack
###开始使用 在/login中使用email和password登录即可。
对于不想使用这种登录方式的,可以自己来写用户认证,诸如使用username和password登录之类的
###后记 文中我们创建用户使用的是python代码。
如果是单独创建用户,也可以用
|
|
如果你愿意也可以采用http请求创建,详情可以跟踪sysadmin里的创建用户功能(封装成restful接口可用作异构系统接口)
坑
删除用户之后创建同名用户,会造成:CommentClientRequestError: u’[“Username is already taken”]’,猜测是评论系统内依然留存有用户造成的,而评论系统是个异构系统(mongodb)
线索:
- import lms.lib.comment_client as cc
- cc_user = cc.User.from_django_user(user)
解决方案
如果我们的猜测是对的,应该只要删除点mongodb中的user应该就好了
|
|
一切正常,猜测正确!
文章作者 种瓜
上次更新 2016-07-13