提供基于zotero的书目分面搜索界面的烧瓶蓝图。

Kerko的Python项目详细描述


科科

kerko是一个web应用程序组件,用于提供 共享书目管理的用户友好搜索和浏览界面 使用Zotero参考管理器。

工作原理

kerko在python中实现为一个烧瓶,并作为 因此,除非将其并入烧瓶应用中,否则不会有多大作用。一 示例应用程序可用,kerkoapp 需求可以直接部署在web服务器上。不过,这是预料之中的, Kerko通常会集成到一个更大的应用程序中,或者 从KerkoApp或定制到特定需求。科科动力书目 可能只是一个较大网站的一部分。

Kerko没有提供任何管理书目记录的工具。取而代之的是 已经很成熟的参考管理软件zotero就是用来做这个的 目的。zotero桌面应用程序提供强大的 个人或团队管理书目数据的工具,它存储 在zotero.org的云端。kerko可以配置为自动同步 它定期从zotero.org上搜索索引,确保访问者能够 一个最新的书目,即使它经常变化。当用户 与kerko应用程序组件交互,kerko从 拥有自己的搜索索引;只有在索引时,kerko才能联系zotero.org。

科科和佐特罗的结合给了你两个世界最好的一面:A 面向书目最终用户的用户友好界面,以及强大的 书目参考管理工具 内容:

功能

Kerko中实现了以下功能:

演示站点

a演示站点供您尝试。您还可以查看 Zotero库包含演示站点的源数据。

要求

Kerko需要Python3.6或更高版本。

依赖关系

安装kerko时将自动安装以下软件包:

  • babel:国际化和本地化实用程序。
  • ef="https://pypi.org/project/bootstrap-flask/" rel="nofollow">引导烧瓶:集成引导的帮助程序
  • 环境:用于将配置与代码分离的帮助程序。
  • 烧瓶:Web应用程序框架。
  • Flask-babelex:允许Kerko在蓝图级别提供自己的翻译。
  • 烧瓶wtf:烧瓶和wtforms的简单集成。
  • jinja2:模板引擎。
  • pyzotero:zotero api的python客户端。
  • werkzeug:wsgi web应用程序库(也是flask所必需的)。
  • whoosh:纯python全文索引和搜索库。
  • wtforms:web表单验证和呈现库。

以下前端资源是kerko默认从cdn加载的 模板(但可以完全删除或由应用程序替换):

  • 引导:用于Web应用程序的前端组件库。
  • fontawesome:漂亮的开源图标。
  • jquery:javascript库(bootstrap所需)。
  • popper.js:用于处理工具提示、弹出窗口等的javascript库(由引导程序使用)。

开始

本节仅适用于您打算将Kerko集成到自己的 申请。如果你对独立的kerkoapp更感兴趣 应用程序,请参阅其安装说明。

我们假设您对烧瓶有一定的了解,并建议以下步骤 构建一个最小的应用程序,让我们称之为"hello_kerko.py",让您开始使用它。

  1. 第一步是安装kerko。与任何python库一样,它是高度 建议在avirtualenv中安装kerko

    一旦virtualenv设置并激活,请使用以下命令:

    pip install kerko
    
  2. hello\u kerko.py中,配置kerko所需的变量并创建 app对象,如下例:

    fromflaskimportFlaskfromkerko.composerimportComposerapp=Flask(__name__)app.config['SECRET_KEY']='_5#y2L"F4Q8z\n\xec]/'# Replace this value.app.config['KERKO_ZOTERO_API_KEY']='xxxxxxxxxxxxxxxxxxxxxxxx'# Replace this value.app.config['KERKO_ZOTERO_LIBRARY_ID']='9999999'# Replace this value.app.config['KERKO_ZOTERO_LIBRARY_TYPE']='group'# Replace this value.app.config['KERKO_COMPOSER']=Composer()
    • 密钥:此变量是在Web中生成安全令牌所必需的 形式.它应该有一个安全的随机值 秘密。它通常在环境变量中设置,而不是在python中设置 代码,以确保它永远不会出现在代码存储库中。但我们在这里 走最小的路线,因此正在削减一些角落!
    • kerko_zotero_api_keykerko_zotero_library_idkerko_zotero_library_type这些变量是kerko必须的 能够访问你的Zotero图书馆。请参见配置变量 有关如何正确设置这些变量的详细信息,请参见第节。
    • kerko_composer:此变量指定kerko所需的关键元素, 例如,显示和搜索字段,过滤方面。这些是 通过实例化composer类来定义。你的申请可以 在配置时操作结果对象以添加、删除或 更改字段、面、排序选项或搜索范围。见kerko 食谱部分以获取一些示例。
  3. 还要配置烧瓶babelex和引导烧瓶扩展:

    fromflask_babeleximportBabelfromflask_bootstrapimportBootstrapbabel=Babel(app)bootstrap=Bootstrap(app)

    参见Flask-babelex引导烧瓶了解更多详细信息。

  4. 实例化Kerko蓝图并在应用程序中注册:

    fromkerkoimportblueprintaskerko_blueprintapp.register_blueprint(kerko_blueprint,url_prefix='/bibliography')

    url_prefix参数定义由 Kerko .

  5. 在virtualenv处于活动状态时,运行 以下shell命令:

    exportFLASK_APP=hello_kerko.py
    flask kerko index
    

    Kerko将从zotero.org检索您的书目数据。如果你有 大书目,这可能需要一段时间(没有进展 指示器)。在生产使用中,该命令通常被添加到crontab中 定期执行的文件。

    列出kerko提供的所有命令:

    flask kerko --help
    
  6. 运行应用程序:

    flask run
    
  7. 在浏览器中打开http://127.0.0.1:5000/biotegraphy/" rel="nofollow">http://127.0.0.1:5000/biotegraphy/,并浏览 参考书目。

  8. < > >

    您刚刚为kerko构建了一个非常小的应用程序。查看kerkoapp 一个更完整的例子。

    配置变量

    以下变量是必需的,没有默认值:

    • kerko_zotero_library_id:您的个人用户id用于api调用,如给定的 在zotero.org上(您必须登录 在zotero.org上)。
    • kerko_zotero_library_type:zotero.org上的库类型(或者 'user'用于您的主个人库,或'group'用于组库。
    • kerko_zotero_api_key:与zotero.org上的库关联的api密钥。 您必须创建该键。
    • kerko_composer:类的一个实例。

    如果您希望,可以将下列任何变量添加到配置中 覆盖它们的默认值:

    • kerko_title:要在网页中显示的标题。默认为'kerko'
    • kerko_data_dir:存储搜索索引的目录。默认值 要数据/kerko
    • babel_default_locale:用户界面的默认语言。默认值 到'en'。应用程序可以设置此变量和/或实现区域设置 选择函数来覆盖它(请参见flask-babelex 文档)。
    • kerko_use_translations:使用kerko软件包提供的翻译。 默认为true。当设置为false时,可以提供翻译 根据应用程序自己的翻译目录。
    • kerko_whoosh_language:搜索请求的语言。默认为'en'。 你可以参考whoosh的源代码来获得支持语言的列表 (whoosh.lang.languages)和支持词干分析的语言列表 (whoosh.lang.有茎干器())。
    • kerko_zotero_locale:用于zotero api调用的区域设置。这意味着 Zotero项类型、字段名、创建者类型和引用的区域设置。 默认为'en-us'。支持的区域设置列在 https://api.zotero.org/schema,在"locales"下。
    • kerko_page_len:每页的搜索结果数。默认为20
    • kerko_csl_style:用于格式化的引文样式参考文献。可以是 中某个样式的文件名(不带.csl扩展名) zotero样式库(例如,apa)或远程 CSL文件。默认为'apa'
    • kerko_results_abstract:在搜索结果页中显示摘要。默认为 false
    • kerko_pager_links:要在寻呼机中显示的页数(不包括 当前页)。默认为8
    • kerko_facet_collapping:允许折叠facet。默认为false
    • kerko_print_item_link:在项目页面上提供打印按钮。默认为 false
    • kerko_print_引文链接:在搜索结果上提供打印按钮 页.默认为false
    • kerko_print_citiations_max_count:打印按钮应超过的限制 在搜索结果页面中隐藏。默认为0(即无限制)。
    • kerko_download_引文链接:在搜索结果上提供下载按钮 页.默认为true
    • kerko_download_citiations_max_count:下载按钮的限制 应在搜索结果页中隐藏。默认为0(即无限制)。
    • kerko_zotero_max_尝试次数:zotero api之后的最大尝试次数 在索引过程中返回错误或未响应。默认为10
    • kerko_zotero_wait:两次失败尝试之间的等待时间(秒) 调用zotero api。默认为120
    • kerko_zotero_batch_size:每次呼叫 ZoTeO-API默认为100 API)
    • kerko_zotero_start:跳过项目,从指定位置开始。默认值 到0。仅用于开发/测试。
    • kerko_zotero_end:从zotero加载项目到指定位置。 默认为0(无限制)。仅用于开发/测试。

    Kerko食谱

    已知限制

    • 该系统可能可以处理相对较大的书目(它已经 到目前为止测试了约15k个条目),但是不同方面值的数量 对响应时间的影响更大。为了获得最佳响应时间,建议 将不同面值的数量限制为几百。
    • Kerko只能为每个应用程序管理一个书目。
    • 尽管kerko可以集成在一个多语言的web应用程序中 访问者可以选择一种语言,Zotero不提供管理标记或 多种语言的集合。因此,科科很难 以用户语言提供这些名称。
    • whoosh并没有为非西方语言提供很多现成的支持。 因此,搜索可能无法很好地处理此类语言。
    • 除了zotero之外,没有其他参考管理工具可以作为 Kerko .

    设计选择

    • 不要构建后端。让Zotero充当"内容管理"系统。
    • 允许Kerko集成到更丰富的Web应用程序中。
    • 仅在Kerko中实现与 参考文献。让web应用程序的其他部分处理所有其他 可能需要的功能。
    • 使用轻量级框架(烧瓶)以避免携带许多 不需要。
    • 使用纯python依赖项来简化安装和部署。因此 例如,使用whoosh进行搜索,而不是elasticsearch或solr。
    • 前端采用经典架构。保持简单,避免使用资产 管理。有些人还是想更换前端。

    翻译Kerko

    可以使用babel的设置工具翻译kerko 集成

    应该从包含 setup.py和相应的virtualenv必须已激活 事先。

    创建或更新采购订单模板(pot)文件:

    python setup.py extract_messages
    

    基于pot文件创建新的po文件(用于新的区域设置)。替换 您的语言环境使用适当的语言代码,例如,deesfr

    python setup.py init_catalog --locale YOUR_LOCALE
    

    基于pot文件更新现有po文件:

    pip install kerko
    
    0

    编译MO文件:

    pip install kerko
    
    1

    欢迎你贡献你的翻译。参见提交 翻译部分。

    贡献

    报告问题

    问题可以提交到kerko的问题跟踪程序上。拜托 请考虑以下准则:

    提交代码更改

    拉取请求可以针对kerko的存储库提交。拜托 请考虑以下准则:

    提交翻译

    一些指导原则:

    • po文件编码必须是utf-8。
    • 必须正确填写采购订单文件的标题。
    • 必须翻译采购订单文件的所有信息。

    请将您的翻译作为请求提交到kerko的 存储库,或通过电子邮件发送 附件(不要将采购订单文件的内容复制到电子邮件正文中,因为 这可能会导致格式化或编码问题)。

    支持项目

    培育一个开源项目,如kerko,跟踪问题和 帮助他人使用系统是一项艰巨的工作,但是 Kerko的原始开发人员可以在确保持续支持和 项目开发。

    如果你需要与Kerko相关的专业支持,请不要 目前在Kerko实施,希望能确保一些Kerko问题 对你来说很重要的是,如果你喜欢我们的工作并且愿意 请为一个无关的项目雇用我们,请给我们发电子邮件

    项目背景

    Kerko的灵感来自两个先前的项目:

    后来,其他组织显然需要类似的解决方案。 但是,以前项目中的软件必须重写,以便 很容易为来自不同组织的不同书目配置 不同的需求。这导致了科科,他的发展是通过 以下项目:

    • 待办事项:在项目1启动时列出它。
    • 待办事项:项目2上线后列出。

    词源学

    据报道,zotero这个名字来自阿尔巴尼亚语单词zot_roj 意思是"学得非常好,即掌握或获得一项技能 在学习中"(来源:Zotero的词源)

    名字"kerko"是对zotero的肯定,因为它采用了类似的词源学路线:it 源于阿尔巴尼亚语单词k_rkoj "寻找,寻找,要求,寻找",似乎适合描述一个搜索 工具.< /P>

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java如何修复尝试将用户签名到服务器主机时出现的“字符串无法转换为json对象”错误?   控制台Java:不使用新行更新命令行中的文本   java servlet接收xml数据时,出现错误   使用REST API在Bitbucket中复制或复制存储库   java如何在JavaFX中对齐一行?   java如何在活动中显示通过服务获得的数据?   返回BigDecimal作为字符串:返回int   java组织。openqa。硒。InvalidSelectorException:尝试查找元素时选择器无效   java仅在阻塞状态下通知和通知所有影响线程   java JBOSS无法启动部署   java方法的返回值能保证类型安全吗?   JavaeShadoop序列化组织。阿帕奇。hadoop。木卫一。短写失败   java如果我在同一个类上同步了两个方法,它们能同时运行吗?   不使用java数据库的spring分页实现   java如何将字符串切碎成这样的数组?