在搭建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脚本的同学可能有用
sudo -u www-data /edx/bin/python.edxapp ./manage.py lms --settings aws create_user -e [email protected] sudo -u www-data /edx/bin/python.edxapp ./manage.py lms --settings aws changepassword xxxxxx
时间: 2024-10-31 19:59:47