方法

采用jupyter来探究,基于dogwood做的探索

获取course的各种方法

需要注意的是各种方法获取的course,关联的数据不尽相同

get_courses

  • 方法路径: from courseware.courses import get_courses
  • 源码: get_courses,其获取课程的关键是branding.get_visible_courses

    • 相关源码:

      1
      2
      3
      
      from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
      courses = CourseOverview.get_all_courses(org=filtered_by_org)
      #course = CourseOverview.get_from_id(course_key)
  • 使用方法:

    1
    2
    3
    4
    
    from django.contrib.auth.models import AnonymousUser
    user=AnonymousUser() 
    courses = get_courses(user)
    course = all_courses[0]  # CourseOverview object 
  • 捕获对象:CourseOverview

  • 一些实用属性和方法:

    1
    2
    3
    4
    5
    6
    
    	course.course_image_url #>>>u'/asset-v1:edX+DemoX+Demo_Course+type@asset+block@images_course_image.jpg'
    	course.created 
    	course.get_all_course_keys()
    	get_all_courses()
    	a.get_next_by_created()
    	a.max_student_enrollments_allowed

get_course

  • 方法路径: from courseware.courses import get_course
  • 源码:get_course
  • 使用方法:

    1
    2
    3
    4
    5
    
    from opaque_keys.edx.locations import SlashSeparatedCourseKey
    	course_id_string = u"course-v1:a+b+c"
    	course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id_string)
    	from courseware.courses import get_course  
    	course = get_course(course_id) # CourseDescriptorWithMixins
  • 捕获对象:CourseDescriptorWithMixins

  • 等效于:

    1
    2
    
    	from xmodule.modulestore.django import modulestore
    	course = modulestore().get_course(course_key)
  • 一些实用属性和方法:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    	course.advanced_modules #高级模块
    	course.children # >>>BlockUsageLocator  已有的章节
    	course.category # u'course'  自省功能 ,course.children[0].category -> u'chapter'
    	course.display_name # 课程名 ,可以在高级设置里修改
    	course.display_name_with_defaulte
    	course.display_number_with_default #course name,在course_id_string中间的那个值(唯一性),可以在高级设置里修改
    	course.fields # 列出所有属性
    	course.get_children() # 获得子节点
    	course.get_content_titles() # 获得所有内容的标题
    	course.get_context().keys() #显示出所有的context,使用keys来观察层次,其中数据很完备
    	course.html_textbooks 
    	course.id #>>>CourseLocator
    	course.number  # course name/number 有唯一性
    	course.pdf_textbooks
    	course.raw_grader
    	course.tabs[0].name #>>>u'Courseware'
    	course.top_level_discussion_topic_ids 
    	course.xml_attributes
    	course.xml_element_name()

get_course_about_section

  • 方法路径: from courseware.courses import get_course_about_section
  • 源码: get_course_about_section
  • Valid keys:

    • overview
    • short_description
    • description
    • key_dates (includes start, end, exams, etc)
    • video
    • course_staff_short
    • course_staff_extended
    • requirements
    • syllabus
    • textbook
    • faq
    • effort
    • more_info
    • ocw_links
  • 案例:course_about.html

    • 疑惑,这个放在course_about页面正常,直接使用有误,跟踪course //course缺乏static_asset_path属性,所以报错
    • views course_about

CourseDetails

  • 方法路径: from openedx.core.djangoapps.models.course_details import CourseDetails
  • 源码: CourseDetails
  • 使用方法:

    1
    2
    3
    4
    5
    
    from openedx.core.djangoapps.models.course_details import CourseDetails
    	course_id_string = u"course-v1:a+b+c"
    	course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id_string)
    	course_details = CourseDetails.fetch(course_key)
    	#course_details.overview

实用代码

  • CourseKey.from_string:

    1
    2
    
    	from opaque_keys.edx.keys import CourseKey
    	course = modulestore().get_course(CourseKey.from_string(kwargs.get('course_id')))
  • get_problems_in_section