用于构建和/或使用LTI应用程序的Python库。分叉自https://github.com/pylti/lti
e-lti的Python项目详细描述
这个库是lti_lti_py的分叉 它已被修改为接受非标准参数并冒泡有用 以异常形式向调用方发送错误消息。
lti是一个python库,它实现了 学习工具互操作性(LTI)标准。 它基于lti_lti_py, 基于dce_lti_py, 基于ims_lti_py。
安装
pip install lti
用法
这个库的主要目标是提供类 用于构建python lti工具提供程序(lti apps)。 为此,您正在寻找的功能 可能在ToolConfig和ToolProvider类(^{tt4})中$ 如果要使用LTI提供程序,也可以使用)。
工具配置示例(django)
下面是一个django视图的示例,您可以将其用作 向LTI使用者注册应用程序时的配置URL。
fromltiimportToolConfigfromdjango.httpimportHttpResponsedeftool_config(request):# basic stuffapp_title='My App'app_description='An example LTI App'launch_view_name='lti_launch'launch_url=request.build_absolute_uri(reverse('lti_launch'))# maybe you've got some extensionsextensions={'my_extensions_provider':{# extension settings...}}lti_tool_config=ToolConfig(title=app_title,launch_url=launch_url,secure_launch_url=launch_url,extensions=extensions,description=app_description)returnHttpResponse(lti_tool_config.to_xml(),content_type='text/xml')
工具提供程序OAuth请求验证示例(django)
fromlti.contrib.djangoimportDjangoToolProviderfrommy_appimportRequestValidatorfromoauthlib.oauth1importSignatureOnlyEndpoint# create the tool provider instancetool_provider=DjangoToolProvider.from_django_request(request=request)# the tool provider uses the 'oauthlib' library which requires an instance# of a validator class when doing the oauth request signature checking.# see https://oauthlib.readthedocs.org/en/latest/oauth1/validator.html for# info on how to create onevalidator=RequestValidator()# validate the oauth request signatureok=tool_provider.is_valid_request(SignatureOnlyEndpoint,validator)# do stuff if ok / not ok
工具消费者示例(django)
在您的视图中:
defindex(request):consumer=ToolConsumer(consumer_key='my_key_given_from_provider',consumer_secret='super_secret',launch_url='provider_url',params={'lti_message_type':'basic-lti-launch-request'})returnrender(request,'lti_consumer/index.html',{'launch_data':consumer.generate_launch_data(),'launch_url':consumer.launch_url})
在模板处:
<formaction="{{ launch_url }}"name="ltiLaunchForm"id="ltiLaunchForm"method="POST"encType="application/x-www-form-urlencoded"> {% for key, value in launch_data.items %} <inputtype="hidden"name="{{ key }}"value="{{ value }}"/> {% endfor %} <buttontype="submit">Launch the tool</button></form>