zoukankan      html  css  js  c++  java
  • 导入用户

    在搭建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 xx@example.com
    sudo -u www-data /edx/bin/python.edxapp ./manage.py lms --settings aws changepassword xxxxxx
    
  • 相关阅读:
    PHP 对Memcache的使用实例
    PHP Memcache 扩展安装
    Effective STL 读书笔记
    windows下安装和使用scrapy
    使用insert ignore来避免向数据库重复插入数据
    2017年末
    归并排序
    二叉树的中序遍历
    正则表达式
    tinymq学习小结
  • 原文地址:https://www.cnblogs.com/zhaojianwei/p/4666737.html
Copyright © 2011-2022 走看看