基于Pyramid和SQLAlchemy的高层次Pythonic Web应用程序框架。它包括一个名为Kotti CMS的可扩展内容管理系统。
项目描述
Kotti 是一个基于 Pyramid 和 SQLAlchemy 的高层、Pythonic 网络应用程序框架。它包含一个可扩展的内容管理系统,称为 Kotti CMS(见下文)。
Kotti 在开发以下应用程序时最为有用:
具有复杂的安全需求,
使用工作流,以及/或
处理分层数据。
Kotti 建立在多个优秀软件组件之上,最著名的是 Pyramid 和 SQLAlchemy,它只引入了少量自己的概念,因此有望使开发人员的学习曲线保持平坦。
Kotti CMS
Kotti CMS 是一个受 Plone 影响很大的内容管理系统。其主要特性包括
用户友好性:编辑可以在内容出现的位置编辑内容;因此,编辑界面是上下文相关的和直观的
所见即所得编辑器:包含一个丰富的文本编辑器
响应式设计:Kotti 基于 Bootstrap,在桌面和移动设备上看起来都很好
模板化:您可以使用几乎不需要编程的方式扩展 CMS 的外观和感觉
附加组件:安装各种附加组件,并通过使用 INI 配置文件来定制它们以及内置 CMS 的许多方面
安全性:高级用户和权限管理直观,并可根据大型组织的需求进行扩展
国际化:用户界面完全可翻译,数据存储处使用 Unicode
许可证
Kotti 在 BSD 衍生的 Repoze 公共许可证 下提供。
安装
请参阅安装说明。
支持和文档
在 Read the Docs 上阅读 Kotti 的详尽文档。
如果您有疑问或需要帮助,可以在我们的 邮件列表/论坛 上发帖,或者加入我们的 IRC:#kotti on irc.freenode.net。
如果您认为您发现了一个错误,可以在我们的 Github 错误跟踪器 上打开一个问题。
开发
变更历史
2.0.9 - 2022-05-05
将 py-bcrypt(未维护,最后发布于2013年)替换为 bcrypt。
将 bleach 锁定在 <5(不兼容的API更改)。
2.0.8 - 2022-05-05
棕色袋发布(隐藏)。
2.0.7 - 2021-09-02
添加对 SQLAlchemy 1.4 的兼容性(并强制要求)。
修复 url_normalizer 测试(之前未收集)。
优化具有大型 Node 子类层次结构的应用程序遍历。
为 get_root 添加适当的缓存。
2.0.6 - 2021-05-12
修复性能问题:现在 Content._tags 配置为 lazy="select"。这不会导致API使用发生变化,然而在某些情况下,它通过轻微的性能下降来加快对 Node 和其后代的1-2个数量级的查询速度。
将依赖项更新到最新兼容版本。
2.0.5 - 2021-03-16
修复当值为 None(即没有任何内容需要清理)时的清理器错误。
暂时将 Pyramid 锁定在 <2。
将 SQLAlchemy 锁定在 <1.4 以防止 sqlalchemy-utils 中的不再工作的私有导入。
2.0.4 - 2020-11-20
将已弃用的 bleach_whitelist 替换为其后续者 bleach-allowlist。
升级 iso8601。
2.0.3 - 2020-11-18
升级到 pytest>=6。
将 pytest-pep8 替换为 pytest-flake8;修复或消除现有代码(主要是测试和迁移)中的 flake8 警告/错误。
2.0.2 - 2020-06-22
升级 requirements.txt。 [修复 #576]
移除 CircleCI
修复损坏的标签小部件 (#562)。
在所有 Python 文件上运行 pyupgrade --py36-plus,在适当的地方使用一些更现代的语言功能(例如 f-strings)。
声明 Python 3.7 和 3.8 兼容性。
移除 Python 3.5 兼容性。
移除 rfc6266-parser 依赖。
2.0.1 - 2019-01-09
使用 black 重新格式化源代码。
从包代码中移除测试导入。
2.0.0 - 2019-01-07
更新文档(kotti-cookiecutter 是新的脚手架模板)。请参阅 https://github.com/Kotti/kotti-cookiecutter
要求 pytest >= 4.1.0,使用 request.node.get_closest_marker 而不是已弃用的 request.keywords。
2.0.0b2 - 2018-04-04
修复 @@share 视图中的 CSRF 问题 (#551)。
2.0.0b1 - 2018-03-19
移除指向已长期下线的演示站点的链接。
2.0.0a1 - 2018-02-22
这是一个 alpha 版本。盲目升级您的生产环境将使宇宙崩溃!
向后不兼容性
Python 3 兼容性
Kotti 现在可以在 Python >= 3.5 上运行。
完全删除了对 Python 2.x 的支持,除非有人实现它或愿意为此付费。
标记为 Kotti 1.x 中弃用的所有内容都已删除。
通过 pcreate 的脚手架支持已被删除,因为它现在已被 Pyramid 弃用。另一种解决方案(cookiecutter 模板)可能在未来再次可用。
新功能
Python 3 兼容性
在 Circle CI、Travis CI 和 Scrutinizer 上进行广泛的测试和代码分析。
修复
避免 pyramid.security.has_permission 的弃用警告
1.3.2 - 2018-04-04
此版本修复了在 #551 中报告的 CSRF(跨站请求伪造)安全漏洞。您应尽快升级您的安装。
1.3.1 - 2018-01-17
在渲染槽视图时,使用 request.blank() 创建请求。这是正确的行为,与自定义 kotti.request_factory 保持一致。还添加了 blank() 方法到 kotti.testing.DummyRequest。
当用户验证成功后,在编辑栏中显示工作流程状态。在此之前,只有在有“编辑”权限时才会显示。
优化文件编辑表单:不要将初始文件数据加载到会话数据中,并且在保存表单后不要重写文件数据,如果该数据在编辑表单中没有改变。
修复错误:在菜单中显示可添加内容时,检查工厂是否定义了 add_view。这避免了例如,从没有定义 add_view 的 Content 派生的内容类型导致的硬崩溃。
向 edit/master.pt、edit-bar 和 nav-bar 插槽添加 nav-bar 插槽到 view/master.pt
修复错误:简化 404 页面,验证成功后不再崩溃
更改:简化 kotti.util.LinkBase.selected():使用 request.view_name 而不是从 request.url 提取视图名称。即使 URL不以斜杠 '/' 结尾,也考虑将视图编辑栏条目视为已选中。
功能:添加捷克语翻译。
从测试依赖中移除 pytest-warnings(已在现代 pytest 版本中集成)
1.3.0 - 2016-10-10
重大更改
升级到 repoze.workflow==1.0b。 如果您的应用程序有一个自定义 ``workflow.zcml``,它需要进行一些修改:``state`` 和 ``transition`` 标题不再是 ``key`` 节点,而是相应的 ``state`` 或 ``transition`` 节点的属性。有关示例,请参阅 Kotti 的 ``workflow.zcml``。
功能和修复
当 creation_date 或 modification_date 为 None 时,在 contents.pt 中添加一个后备。
将工作流程状态标题转换为 TranslationStrings,不使用 eval 并弃用。
将一些仅适用于 Python 2 的代码替换为也支持 Python 3 的等效代码。
使用通用的 SQLAlchemy 类型 Text 作为 JsonType 的基类型。这允许 SQLAlchemy 将 Text 类型映射到给定数据库系统中最合适的数据类型。以前使用的 TEXT 类型在 Oracle 数据库中不可用。如果 Kotti 的现有安装使用将通用 Text 类型映射到不同类型的数据库系统,则需要将现有列“nodes._acl”和“nodes.annotations”转换为该类型,或将 SQLAlchemy 配置为将通用 Text 类型映射到这两个列的现有类型。有关如何操作的示例,请参阅 http://stackoverflow.com/a/36506666/95735。对于 SQLAlchemy 为所有数据库系统提供方言(除了 Oracle 外的 Firebird、Microsoft SQL Server、MySQL、Postgres、SQLite、Sybase)的系统,无需执行任何操作。
我们使用 PEP 440 标准化格式为项目版本,因此当前的“1.3.0-alpha.5-dev”变为“1.3.0a5.dev0”。
将测试升级到 zope.testbrowser>=5.0.0。这消除了 mechanize 和 wsgi_intercept 依赖项,从而消除了 Python 3 兼容性的最后一个障碍。
将 pytest 配置从 setup.cfg 移动到新的 pytest.ini。这防止了 pytest>=3.0 时的弃用警告。
将 kotti.testing.TestingRootFactory 重命名为 kotti.testing.RootFactory 以防止 pytest>=3.0 时的另一个弃用警告。
1.3.0-alpha.4 - 2015-01-15
这是一个 alpha 版本。盲目升级您的生产环境将使宇宙崩溃!
添加 kotti.depot_replace_wsgi_file_wrapper 选项,用于用 pyramid.response.FileIter 替换 WSGI 文件包装器,以处理有问题的工作环境。
1.3.0-alpha.3 - 2016-01-11
这是一个 alpha 版本。盲目升级您的生产环境将使宇宙崩溃!
修复错误:如果不在位置感知上下文中(例如 404 视图),则不要尝试通过系谱获取 api.root。返回站点根。
1.3.0-alpha.2 - 2016-01-05
这是一个 alpha 版本。盲目升级您的生产环境将使宇宙崩溃!
添加自定义遍历器,它通过单个数据库查询获取所有节点。对于深度嵌套的树,这可以实现显著的性能提升。详细信息请参阅 https://kotti.readthedocs.io/en/master/api/kotti.traversal.html。
错误修复:文件节点的复制和粘贴不会创建新的仓库文件,而是导致对单个文件的多次引用,当其中一个后来被删除时,会导致不期望的结果。
错误修复:通过复制和粘贴创建新节点时,本地“角色:所有者”没有被设置。
错误修复:在不明条件下,kotti.events._update_children_paths 可能会失败(至少在 Python 2.6 与 SQLite 下)。
去除更多浏览器 doctests(已转换为 webtest)。
1.3.0-alpha.1 - 2015-12-22
这是一个 alpha 版本。盲目升级您的生产环境将使宇宙崩溃!
完全修订了 Depot 集成。详细信息请参阅 https://kotti.readthedocs.io/en/latest/developing/advanced/blobs.html。
使 kotti.resources.SaveDataMixin 更加灵活,现在它支持子类上的 data_filters 属性(或甚至完全覆盖 data 属性)。有关此功能的示例,请参阅新 kotti_image 软件包的说明文档和 Depot 文档(https://depot.readthedocs.io/en/latest/database.html#custom-behaviour-in-attachments)。
这些更改需要数据库迁移。
包含了一个迁移脚本,可以通过运行 kotti-migrate <your.ini> upgrade_all 来执行。然而,如果您的应用程序中从 kotti.resources.Image 继承,则此脚本将失败。它也不涵盖从 kotti.resources.File 继承的定制类(除 Kotti 的 Image 之外)。可以通过将包含的迁移步骤的代码复制到您的包的迁移环境中并调整以满足您的需求来轻松执行这些迁移。
将所有与图像相关的代码移动到新的 kotti_image 扩展包中。所有类和函数都被导入到它们原来的位置,因此从那里导入的代码仍然可以正常工作。
修复上传类型选择器损坏的问题。
为非 ASCII 文件名创建符合 RFC6266 的内容处置头。
添加 request.uploaded_file_response 方法。
1.2.4 - 2015-11-26
修复 1.2.3 版本的损坏打包。对此造成的不便表示歉意!
1.2.3 - 2015-11-26
将 Kotti 标志和图标添加到静态资产中。
使用 Kotti 标志作为 favicon。
将 favicon 定义移动到单独的模板,以便易于覆盖。
修复 kotti.views.util.nodes_tree 中的权限检查问题。
1.2.2 - 2015-10-28
添加简单、默认的 not found view。
在 workflow-dropdown 中,将硬编码的权限检查替换为对每个现有转换的单独权限检查。
升级需求。
1.2.1 - 2015-10-07
将成功认证后运行的代码移至可配置的 kotti.login_success_callback 函数。
将有效密码重置请求后运行的代码移至可配置的 kotti.password_reset_callback 函数。
支持非字符串属性上的主体搜索。
支持匹配 所有 参数的主体搜索(即使用 and 操作符,or 仍然是默认值)。
支持 kotti-migrate 升级时的可选 -rev。
1.2.0 - 2015-09-27
大幅 减少 DB 发送的查询数量:- 为根节点添加缓存。 - 对 local_groups 使用 eager / joined loading。 - 不查询主体的角色。
添加“缺失”的外键索引(以及相应的迁移步骤)。
添加 kotti.modification_date_excludes 配置选项。它接受以点命名法表示的属性列表,这些属性在更改时不会触发 modification_date 的更新。默认为 kotti.resources.Node.position。
不要在Pyramid的tweens未遵循常规调用链时,从NewRequest处理器设置缓存头。这修复了与bowerstatic的兼容性。
不要假设在渲染事件(例如BeforeRender)中存在renderer_name。关于渲染器被调用时,system参数应包含什么,pyramid.interfaces.IRenderer的官方文档字符串有些含糊。这修复了与pyramid_layout的兼容性。
添加 kotti.modification_date_excludes 配置选项。它接受以点命名法表示的属性列表,这些属性在更改时不会触发 modification_date 的更新。默认为 kotti.resources.Node.position。
1.1.5 - 2015-09-04
修复MySQL上的迁移错误。
只包装存在于包装类型上的方法(在kotti.sqla.MutationList / kotti.sqla.MutationDict)。这修复了通过colander.SequenceSchema将MutationLists暴露给UI时发生的一个错误。
将需求升级到最新版本(filedepot,waitress)。
1.1.4 - 2015-06-27
增加与SQLAlchemy 1.0的兼容性。现在也要求SQLAlchemy 1.0.6。
在槽渲染期间忽略HTTPForbidden异常。
1.1.3 - 2015-06-17
修复了kotti-migrate中的一个错误,该错误阻止了初始迁移步骤成功运行。
要求kotti_tinymce 0.5.3。
1.1.2 - 2015-06-12
增大name、path和title列的大小(见#427)。从任何低于1.1.2的版本升级都需要你在数据库上运行迁移脚本。要运行迁移,请调用
$ bin/kotti-migrate <myconfig.ini> upgrade
为title添加长度验证器(部分修复#404)。见#428
移除html段name(Kotti.util.title_to_name)的40字符最大长度约束。见#428
更新意大利语翻译。
更新文档。
向kotti.resources.TypeInfo添加一个默认值为add的add_permission属性。见#436
在删除节点视图中添加“取消”按钮。
1.1.1 2015-05-11
更新脚手架的README文件。见#417。
修复损坏的多文件上传。见#425。
1.1.0 2015-04-16
将默认操作分离到kotti.resources.default_actions变量中,以便更容易地自定义所有内容类型的默认操作。这是一个LinkParent,你可以向其children中追加新的kotti.util.Link对象。
向kotti.util.Link添加target选项。见#405。
添加清理器。见docs/development/advanced/sanitizers和kotti.sanitizers以获取详细信息。这修复了#296。
添加了一篇关于如何自定义编辑界面的新文档。见docs/development/advanced/add-to-edit-interface。
通过将它们分离到新的kotti.resources.default_actions变量中,使自定义默认操作更容易。以前,要自定义它们,您必须更改Content.type_info.edit_links[3].children,现在您可以直接修改default_actions。有关详细信息,请参阅docs/development/advanced/add-to-edit-interface。
将WebOb、html2text、pyramid和xlwt升级到最新稳定版本。
1.1.0-alpha.1 - 2015-03-19
允许将File和Image的blob数据从数据库移动到可配置的存储。为了实现这一点,我们使用了filedepot,这是一个内置了多个插件存储的第三方库。有关此功能带来的详细信息,请参阅docs/developing/advanced/blobs.rst。从任何低于1.1.0的版本升级都需要你在数据库上运行迁移脚本。要运行迁移,请调用
$ bin/kotti-migrate <myconfig.ini> upgrade
请注意,在运行迁移之前,您应该花时间阅读文档并配置所需的存储方案。
允许使用 DBStoredFile 和 DBFileStorage 在数据库中存储blob数据,这是 filedepot 的一个以数据库为中心的存储插件。这种存储是blob数据的默认存储方式,除非有其他配置。
添加了一个脚本,用于在不同存储库之间迁移blob数据。有关如何使用的详细信息,请参阅docs/developing/advanced/blobs.rst。
通过使用 kotti.views.file.UploadedFileResponse 简化了blob数据的提供,它也可以流式传输数据。请注意,默认的 DBStoredFile 仍然需要将其全部数据加载到内存中,为了利用此功能,您应该配置另一个默认的存储库。
添加了三个新的测试固定值:mock_filedepot,用于在不依赖数据库会话的简单单元测试中,filedepot,它集成了 dbsession 固定值,以及 no_filedepot,这是一个可以用于开发新文件存储库插件测试的固定值 - 通过在运行测试前后保留存储库配置。注意:为了测试带有请求中上传数据的编辑视图,您需要混合 filedepot 固定值。
为通过 kotti.util.command 定义的定制命令初始化 pyramid.paster.logging,以便允许通过定制命令启动的 kotti 会话输出日志消息。
删除了未使用的 kotti.js。
删除了过时的 kotti.views.slots.local_navigation 和 kotti.views.slots.includeme_local_navigation。请使用 kotti.views.navigation.local_navigation 和 kotti.views.navigation.includeme_local_navigation 代替。
将 plone.scale 和 SQLAlchemy 升级到最新的稳定版本。
为了提高可用性,修改了 body 小部件(RichTextField)上的 height 属性。请参阅 #403。
1.0.0 - 2015-01-20
没有更改。
1.0.0-alpha.4 - 2015-01-29
添加了实验性的Docker支持。请参阅 #374。
允许将 添加视图 限制为特定上下文。这允许第三方开发人员通过在他们的 添加视图 注册中指定 context=SomeContentType 以及在类型信息中包含 type_info.addable=['SomeContentType'] 来注册可在特定类型上下文中添加的新内容类型。
对于以数字结尾的重复标题的文档,添加一个计数器而不是增加它们的数字。修复了 #245。
更新所有要求(除了 alembic)到其最新版本。
1.0.0-alpha.3 - 2015-01-13
显式实现 pyramid.interfaces.IRequest 对于 kotti.request.Request。这允许附加包使用 config.add_request_method(带有 reify)和 config.add_request_property 而不破坏请求提供的接口。修复了 #369。
1.0.0-alpha.2 - 2015-01-01
要求 kotti_tinymce==0.5.1。这修复了 #365。
1.0.0-alpha - 2014-12-20
添加了一个基于 Pyramid 的 pcreate 的新脚手架。要运行脚手架的测试,您必须使用 py.test 命令的 --runslow 选项。在 Travis 上默认启用此选项。
kotti._resolve_dotted 现在返回一个已解析的设置副本(而不是像以前那样就地解析)。
提取特定于 DBMS 的补丁,并将其提供给测试固定值。
添加了新的固定值,这些固定值也可以用于附加测试。
custom_settings 不做任何事情,并且旨在在附加测试套件中覆盖。它允许将任意键/值注入到测试中使用的设置字典中。
unresolved_settings 保证仅包含未解析的字符串值(或其列表)。
现在可以保证 settings 已经完全解析。
webtest 返回一个带有 @user 标记的 webtest.TestApp 实例,这应该用于代替浏览器功能测试。
使用 RTD 主题进行文档编写。
使用所有要求的最新版本。唯一有显著差异的升级是 lingua(从 1.4 升级到 3.6.1)。这完全改变了 lingua 的 API。有关大幅简化的新用法详情,请参阅 docs/developing/basic/translations.rst。
删除自 Kotti 0.8 起已标记为过时的代码(包括测试)。
改进 UI 以更好地使用 Bootstrap 3。
允许 move-child-position 视图的参数既可以在 request.POST 中,也可以在 request.json_body 中。
不要使用标记为过时的 Pyramid 代码。
将 pyramid.security.authenticated_userid 替换为 request.authenticated_userid。
为了与 Pyramid 1.5 中的相应过时声明保持一致,已过时 kotti.security.has_permission。您现在应使用 request.has_permission。
确保 Node.path 中的所有值都以 / 结尾。这使得所有节点(包括根节点)保持一致,并对应于 request.resource_url 的值。作为副作用,查询变得更加容易。但是,如果您之前期望使用旧路径值,则可能需要对代码进行调整。数据库升级包括迁移步骤。
0.10b1 - 2014-07-11
向 MutationList 和 MutationDict 添加一个 __json__ 方法。
这是为了让 Pyramid 的序列化器能够正常工作。
0.10a4 - 2014-06-19
将 Pyramid 升级到版本 1.5.1。
0.10a3 - 2014-06-11
将 SQLAlchemy 和 alembic 依赖项从 0.8.2 和 0.5.0 升级到 0.9.4 和 0.6.5。
不要在 Node.path 事件处理程序中刷新。否则,我们将触发具有奇怪对象状态的对象处理程序。
修复了 Node.path 的错误,我们向一个从数据库中加载但其父节点尚未加载的父节点附加了一个 Node 实例。
修复了与 Pyramid 的 custom_view_predicates 和 set_request_property 有关的过时警告。同时过时 kotti.views.util.is_root。
0.10a2 - 2014-06-05
添加 Node.path 列。这允许基于路径进行查询,因此只需找到给定节点的所有子节点、孙节点等就变得容易得多。
DBSession.query(Node).filter(Node.path.startswith(mynode.path))
将 session 属性添加到请求属性中,以复制到槽视图请求。
迁移
从 0.9.2 升级到 0.10 需要在您的数据库上运行迁移脚本。要运行迁移,请调用
$ bin/kotti-migrate <myconfig.ini> upgrade
在运行迁移之前,请确保 备份 您的数据库!
0.10a1 - 2014-05-19
Kotti 现在基于 Bootstrap 3(因此是 Deform 2)。
这是一个与大多数模板(包括表单模板)不兼容的向后不兼容更改!如果您的项目具有模板自定义或依赖于插件,则内容可能会出现破损!
如果您 仅 使用 Kotti 的默认 UI,则您的应用程序在无需更改的情况下继续正常工作的可能性很高。尽管如此,Kotti 的 API 大多未变,且完全向后兼容。
重新设计 'kotti.util.Link'('ViewLink')的实现,使其更灵活。
现在支持嵌套“edit_links”,因此不再需要特殊的“action_links”列表。链接现在也能更好地利用模板进行渲染,整体上可能更容易自定义。
添加了对Pyramid>=1.5的兼容性。#273
在测试中,将settings和setup_app转换为fixture以简化覆盖。
添加了kotti_context_url JS全局变量。有关为什么需要这个变量的更多细节,请参阅
添加了“delete”权限,这对于“delete”和“delete_nodes”视图是必需的。因此,默认工作流程已更新。它允许更精细的工作流程:例如,创建一个可以编辑内容但不能删除内容的角色。
为了使使用默认工作流程的现有Kotti实例兼容,并避免具有“editor”角色的用户(到目前为止,他们可以编辑和删除内容)无法删除内容,需要使用“kotti-reset-workflow <application ini file>”命令重置工作流程。
修复#308:粘贴剪切节点时出现唯一名称约束问题。
0.9.2 - 2013-10-15
修复#268:在get_appstruct中将None转换为colander.null,以防止序列化失败(由于colander的最近更改而需要)。
0.9.1 - 2013-09-25
允许用户管理员修改用户密码。
需要更新的kotti_tinymce(源代码编辑在0.4中已损坏)。
0.9 - 2013-09-17
添加多文件内容上传。您现在可以从本地存储中选择多个要上传的文件,并选择在您的Kotti站点中创建哪些内容节点。目前,可以上传MIME类型为image/*的文件,并创建Image或File节点,所有其他MIME类型都将创建为File。在未来版本(或附加产品)中,可以通过添加额外的转换器来扩展此功能,例如上传HTML文件并创建具有标题标签内容的Document节点,标题标签成为节点的标题,正文标签成为节点的正文等。
修复#253:上次发布中未包含许多翻译。
在运行“compile_catalog”时添加“–use-fuzzy”翻译会恢复最近标记为模糊的翻译。(所有标记为模糊的德语翻译仍然准确。)
修复#252:将提取消息失败时用<tal:block>包装模板。
修复#249:TinyMCE翻译再次工作。
0.9b2 - 2013-08-20
修复#251:NestedMutationDict和NestedMutationList的比较损坏。
更新kotti_tinymce到版本4.0.2。
修复了kotti.views.content.FileEditForm中的错误,以在编辑时保留文件内容。
0.9b1 - 2013-06-26
添加了kotti.util.ViewLink.visible方法,以更好地控制视图链接是否可见。这允许我们将以前在kotti.views.edit.actions中硬编码的动作链接移动到TypeInfo.action_links,从而使其可配置为全局或按内容类型。
kotti.security.view_permitted现在默认使用“GET”请求方法检查pyramid.security.view_execution_permitted。它以前检查与当前请求方法匹配的视图。
这修复了kotti.util.ViewLink.permitted会错误地检查“POST”视图的问题,而当前请求是“POST”。
添加 INavigationRoot 接口和 TemplateAPI.navigation_root 属性。后者返回实现 INavigationRoot 的第一个内容节点,或者在系谱中没有任何节点实现 INavigationRoot 的情况下返回根节点。使 nav.pt 模板使用 api.navigation_root 而不是 api.root。这允许第三方插件定义可以位于内容树中的任何位置的内容类型,同时仍然作为导航的根。
将导航相关视图代码移至新模块 kotti.views.navigation。弃用旧位置导入。
删除 0.6 或 0.7 中已弃用的 部分 代码。
分配给槽位的视图可以访问其渲染的槽位名称。
在 kotti-reset-workflow 中添加缺失的 transaction.commit()。
修复了 kotti.views.util.render_view 中的错误,其中本地角色没有被正确尊重。
添加用于发送通用电子邮件的辅助方法 kotti.message.send_email。这些电子邮件必须遵循特定的结构。查看 kotti:templates/email-set-password.pt 作为示例。
0.9a2 - 2013-05-04
修复 #222:使用 SQLAlchemy 的 before_flush 事件处理对象事件。
我们之前使用了错误的事件。问题在于 before_insert、before_update 和 before_delete,因为事件处理器无法可靠地调用 Session.add、Session.delete 和更改映射关系。但只有 SQLAlchemy 0.8 开始在这样做时发出警告。
还弃用了 ObjectAfterDelete,因为我认为它没有用。
从主模板中移除 html5shim 并使用 fanstatic 包的 js.html5shiv。
针对 #187 的临时修复。基本上抑制了 DetachedInstanceError。
添加 kotti.events.subscribe 装饰器。有关详细信息,请参阅有关该主题/模块的已更新文档。
0.9a1 - 2013-03-12
修复 include_me 函数的加载顺序。这将在 deform_bootstrap 之前将 Kotti 自身的和 Kotti 插件搜索路径放在前面。
向 @@contents 视图添加带有预览弹出窗口的图像缩略图。
向 @@contents 视图添加拖放排序支持。
向 @@contents 视图添加“全选”复选框。
向 @@contents 视图添加内容路径栏。
0.8 - 2013-03-12
没有更改。
0.8b2 - 2013-02-08
修复 Kotti 的测试,以不再触发弃用警告。Kotti 的 funcargs 仍需更好地记录,请参阅 #141。
添加一个名为 'tagit' 的 fanstatic.Group,并在延迟小部件中需要它。这是在启用主题包之前使标签小部件正确渲染所必需的,直到延迟小部件被替换为声明其要求的常规 deform 风格的小部件类。
将 setup_users、setup_user 和 prefs 视图转换为基于类的视图。在开发手册的 Security 子节中添加一段小文字,提及这些视图。
0.8b1 - 2012-12-30
没有更改
0.8a2 - 2012-12-15
从 requirements.txt 中删除与测试相关的依赖项。因此,现在我们需要运行 python setup.py dev 来获取测试依赖项。
在 requirements.txt 中更新包版本以使用最新的工作版本。
在文档、文件、文件夹和图像的视图中添加标签显示,其中它们在描述和正文之间显示为水平列表。
修改了通用搜索以包括简单的标签搜索。Kotti 的默认搜索基于简单的搜索词匹配。这里也以简单的方式添加了标签搜索,这样你一次只能搜索一个标签,但部分匹配是有效的:搜索 'foo' 可找到标签 'foo bar' 的内容。您还可以通过单击项目标签显示中的单个标签来搜索单个标签。更复杂的标签搜索,就像通用搜索一样,留给专门的插件。
0.8a1 - 2012-11-13
将语言依赖的URL规范化设置为默认。 (如何做曾经是菜谱条目。)
清理节点编辑操作并使用装饰视图类。
添加多项内容的视图和操作。
将children_with_permission方法添加到ContainerMixin。
添加默认视图选择的UI。
弃用‘kotti.views.edit.generic_add’和‘generic_edit’。只需使用基于类的表单。
0.7.2 - 2012-10-02
改进安装说明。现在使用标记的requirements.txt文件。
将事件请求POST变量添加到槽视图的请求中。
添加IFile和IImage接口,允许文件和图像子类重用相同的视图(注册)。
0.7.1 - 2012-08-30
将用户删除操作添加到用户管理中。
修复文件和图像的标签支持。
升级到Twitter Bootstrap 2.1。
删除不再需要的CSS。
修复在部分手机屏幕分辨率上损坏的响应式布局。
添加“站点设置”子菜单/删除@@setup视图。
0.7 - 2012-08-16
修复迁移中的关键问题,其中版本号不会被持久化到Alembic版本表中。
0.7rc1 - 2012-08-14
没有更改。
0.7a6 - 2012-08-07
修复迁移脚本中的连接问题。这会导致在调用kotti-migrate时Postgres出现死锁。
0.7a5 - 2012-08-07
基于repoze.workflow添加工作流支持。一个简单的流程包含在workflow.zcml中,默认启用。使用kotti.use_workflow = 0来禁用。工作流支持添加了一个下拉菜单,允许具有state_change权限的用户修改工作流状态。
更改默认布局
Kotti的新默认外观现在更接近Bootstrap文档,主导航栏位于顶部,编辑栏位于其下方。
升级说明:如果您已定制主模板并希望使用该模板的最新更改,则需要交换nav.pt和editor-bar.pt的api.render_template调用位置,并从主模板中删除search.pt调用(它现在在nav.pt内部调用)。其他一切都是完全可选的。
通过Alembic添加迁移。一个新的脚本kotti-migrate帮助管理Kotti和Kotti插件的数据库升级。运行kotti-migrate <your.ini> upgrade以将Kotti数据库升级到最新版本。
插件作者应查看kotti.migrate模块的文档字符串以获取更多详细信息。
使Document.body可搜索(因此搜索功能第一次真正有用)。
添加“压缩”命令以压缩CSS和JS资源。
要使用它,请运行
python setup.py dev python setup.py minify
minify命令假定所有资源都在kotti/static/。使用YUI compressor进行压缩,并在运行python setup.py dev时自动安装。然而,您仍然需要在开发机器上有一个JVM才能使用minify命令。
修复设置:只有kotti*键的值应转换为Unicode字符串。
修复#89:当用户更改时,验证电子邮件地址的唯一性。
修复#91:搜索框的样式。
修复#104:使fanstatic资源完全可覆盖。
在File.data列上启用延迟加载。
迁移
从0.6升级到0.7需要您在数据库上运行迁移脚本。要运行迁移,请调用
$ bin/kotti-migrate <myconfig.ini> upgrade
在运行迁移之前,请确保 备份 您的数据库!
升级到0.7将为所有内容对象初始化工作流状态和权限,除非您已将kotti-use_workflow覆盖为不使用工作流(使用0)或自定义工作流。
对于具有自定义权限的网站,例如对SITE_ACL进行自定义修改,在运行升级脚本之前,请关闭工作流支持,这是非常重要的。
0.7a4 - 2012-06-25
添加JS/CSS文件的压缩版本。
修复#88:使用电子邮件登录。
更新翻译。
0.7a3 - 2012-06-15
包含kotti.tinymce,该模块为TinyMCE富文本编辑器添加了图片和文件上传以及内容链接的插件。
渲染槽位已被常规视图(或视图小部件)取代。为了替换注册函数,kotti.views.slots.register已被弃用,现在使用的是kotti.views.slots.assign_slot,它的工作方式类似,但接受已注册视图的视图名称,而不是注册函数。
切换到fanstatic进行静态资源管理。
升级说明:这需要修改现有的*.ini应用程序配置文件。具体来说,您需要添加一个filter:fanstatic部分和一个pipeline:main部分,并将现有的app:main部分重命名为app:Kotti或类似名称。请参考Kotti自己的development.ini以获取示例。
弃用未记录的kotti.resources.Setting类和表。现在kotti.get_settings将直接返回registry.settings,而不会在数据库中查找持久性覆盖。
停止支持Pyramid<1.3,因为我们使用pyramid.response.FileResponse,而kotti_tinymce使用pyramid.view.view_defaults。
修复非ASCII密码的编码错误。
0.7a2 - 2012-06-07
不允许不活跃的用户重置他们的密码。
0.7a1 - 2012-06-01
功能
添加新的“图片”内容类型和图片缩放功能,最初来自kotti_image_gallery插件。请参阅kotti.image_scales.*设置。
添加搜索和相关设置kotti.search_content。
添加订阅者以根据缓存规则设置缓存头。请参阅相关设置kotti.caching_policy_chooser。
从核心中删除TinyMCE。
将电子邮件模板移动到页面模板中的kotti:templates/email-set-password.pt和kotti:templates/email-reset-password.pt。这样做是为了使它们更容易翻译和定制。这弃用了kotti.message.send_set_password。
为编辑界面头部的内容添加“edit_inhead”槽位。“inhead”不再在“edit/master.pt”中使用。
有关更多详细信息,请参阅http://danielnouri.org/notes/2012/05/28/kotti-werkpalast-sprint-wrap-up/
错误
修复了组编辑视图中的错误。请参阅https://github.com/Pylons/Kotti/pull/61
修复了在设置密码屏幕后自动登录期间未设置user.last_login_date的错误。
0.6.3 - 2012-05-08
添加了标签支持。所有内容对象现在都有标签。它们可以通过“jQuery UI Tag-it!”小部件在UI中添加。请参阅https://github.com/Pylons/Kotti/pull/55。
修复了文件下载性能错误。
0.6.2 - 2012-04-21
导航视图中的链接现在指向节点视图。添加了编辑链接以查看节点的编辑表单。
现在在添加/编辑视图中点击“取消”将返回到上下文节点。
0.6.1 - 2012-03-30
在顺序屏幕中添加了按钮以显示/隐藏导航中的节点。
现在“重命名”操作会从名称中删除斜杠。修复了#53。
添加荷兰语翻译。
允许翻译TinyMCE的UI(从deform 0.9.5版本开始)
分离出测试依赖。运行 bin/python setup.py dev 以安装带有额外测试依赖的 Kotti。
弃用 'kotti.includes' 设置。使用标准的 'pyramid.includes' 代替。
将 'Node.__acl__' 设置为空列表现在将持久化空列表而不是设置 'None'。
让 'pyramid_deform' 负责配置 deform,包括翻译目录和搜索路径。
0.6.0 - 2012-03-22
添加日语翻译。
在注册和登录时强制用户名和电子邮件地址为小写。
将 SQLAlchemy 相关内容从 kotti.util 移至 kotti.sqla。
现在除了设置属性外,还可以向 'Node.__acl__' 追加内容。
0.6.0b3 - 2012-03-17
自动为 CamelCase 类名生成的 __tablename__ 和 polymorphic_identity 使用下划线,因此类 'MyFancyDocument' 的表名为 'my_fancy_documents',类型为 'my_fancy_document'。
0.6.0b2 - 2012-03-16
使 AddForm 的 'item_type' 属性可选。修复 #41。
kotti.util.title_to_name 现在将返回长度最大为 40 的名称。修复 #31。
0.6.0b1 - 2012-03-15
使用声明式风格而不是类映射器为 SQLAlchemy 资源。
不幸的是,此更改与现有内容类型不兼容(但与现有数据库兼容)。将类型更新为使用声明式很简单。请参阅 kotti_calendar 中的示例:[https://github.com/dnouri/kotti_calendar/commit/509d46bd596ff338e0a88f481339882de72e49e0#diff-1](https://github.com/dnouri/kotti_calendar/commit/509d46bd596ff338e0a88f481339882de72e49e0#diff-1)
0.5.2 - 2012-03-10
新的“操作”菜单使复制、粘贴、删除和重命名项更易于访问。
添加德语翻译。
填充器不再需要自己调用 transaction.commit()。
0.5.1 - 2012-02-27
国际化用户界面。添加葡萄牙语作为第一种翻译。
编辑工具栏中的新“添加”菜单允许在 CMS 中更直观地添加项。
精炼 Node.copy。默认情况下不再复制本地角色。
0.5.0 - 2012-02-15
将 Kotti 的默认用户界面移至使用 Twitter Bootstrap 2。
添加新的“文件”内容类型。
向某些表单添加 CSRF 保护。
弃用 Kotti 的 FormController,改为使用 pyramid_deform。
使用 plone.i18n 将标题规范化为 URL 部分。
添加一个单独的导航屏幕,替代以前的智能面包屑菜单。
将 pyramid_beaker 作为默认会话工厂。
使 kotti.messages.send_set_password 更灵活。
0.4.5 - 2012-01-19
添加 'kotti.security.has_permission',可用来替代 'pyramid.security.has_permission'。
不同之处在于 Kotti 的版本会将“授权上下文”设置为传递给 'has_permission' 的上下文。效果是 'list_groups' 将返回更正确的地方角色列表,即给定上下文中的组而不是 'request.context'。
为用户登录但仍然收到 HTTPForbidden 的情况添加模板('forbidden.pt')。
0.4.4 - 2012-01-05
“禁止视图”将不再将不接受 'text/html' 的客户端重定向到登录表单。
修复 'kotti.site_title' 设置的 bug。
0.4.3 - 2011-12-22
添加 'kotti.root_factory' 设置,允许覆盖 Kotti 的默认 Pyramid root factory。同时,使主模板更健壮,以便可以使用带有 '__parent__' 和 '__name__' 的最小根进行渲染。
将 'kotti.tests' 分离出来。测试现在应从 'kotti.testing' 导入。
0.4.2 - 2011-12-20
通过更好地使用 'config.commit()',为附加包提供更方便的重写。
0.4.1 - 2011-12-20
模块化 Kotti 的 Paste App Factory 'kotti.main'。
允许显式设置 Kotti 创建的表('kotti.use_tables')。
0.4.0 - 2011-12-14
删除配置变量 'kotti.templates.*',改用 'kotti.asset_overrides',后者使用 Pyramid 资产规范及其覆盖。
删除 'TemplateAPI.__getitem__',改为添加 'TemplateAPI.macro',它具有类似但不太“特殊”的 API。
将 'kotti/templates/snippets.pt' 中的片段提取到各自的模板中。使用 'api.render_template' 来渲染它们,而不是宏。
0.3.1 - 2011-12-09
在突变字典中添加 'keys' 方法(参见 0.3.0)。
0.3.0 - 2011-11-30
用扩展的 Node.annotations 代替 Node.__annotations__。
Node.annotations 将尝试不仅识别字典类型子对象的更改,还会透明地处理列表对象。也就是说,更改任意的 JSON 结构应该可以在结构更改时调用 node.annotations.changed() 时正常工作。
0.2.10 - 2011-11-22
现在 'api.format_datetime' 也可以接受时间戳,除了 datetime。
0.2.9 - 2011-11-21
用 'setuptools-git' 代替 MANIFEST.in。
0.2.8 - 2011-11-21
删除 'PasteScript' 依赖项,因为这将导致安装 Kotti 时出现虚假错误。请参阅 http://jenkins.danielnouri.org/job/Kotti/42/TOXENV=py27/console
0.2.7 - 2011-11-20
添加 'PasteScript' 依赖项。
修复 #11,其中 'python setup.py test' 会查找硬编码的 'bin' 目录。
结构分析文档。(未完成;在开发期间位于 'analysis' 目录中。完成时将移至主文档。)
0.2.6 - 2011-11-17
添加 Node.__annotations__ 便利属性。
Node.__annotations__ 将以这种方式包装注释字典,以便既可进行项目访问又可进行属性访问。它还将记录字典内部字典的更改,并将父 __annotations__ 属性标记为脏。
添加欢迎页面。
删除 0.2.4 版本中添加的演示。
0.2.5 - 2011-11-14
添加 'TemplateAPI.render_template';允许从模板方便地渲染模板。
0.2.4 - 2011-11-13
针对 Pyramid 1.2 进行调整:INI 文件、pyramid_tm、Wsgiref 服务器、pcreate 和 pserve。(MO)
添加 Kotti 演示源和文档。
0.2.3 - 2011-10-28
Node.__getitem__ 现在也将接受元组作为键。
folder['1', '2'] 与 folder['1']['2'] 相同,只是更高效。
添加了一个基于 repoze.lru 的新缓存装饰器。
0.2.2 - 2011-10-10
将 kotti.authn_policy_factory、kotti.authz_policy_factory 和 kotti.session_factory 的函数签名更改为包含配置文件中的所有设置。
0.2.1 - 2011-09-29
对事件设置代码进行了一些小更改,以简化测试中的使用。
0.2 - 2011-09-16
没有更改。
0.2a2 - 2011-09-05
修复模板以与 Chameleon 2 兼容。另外,需要 Chameleon>=2。
需要 pyramid>=1.2。另外,为 development.ini 配置启用 pyramid_debugtoolbar。
0.2a1 - 2011-08-29
改进 Nodes 的数据库模式。将 Node 类拆分为 Node 和 Content。
此更改与向后不兼容,因为您代码中的现有内容类型需要从 Node 而不是 Content 继承。文档中的示例已被更新。此外,底层数据库模式已更改。
改进用户数据库哈希和本地角色存储。
针对 Pyramid 1.2 的兼容性修复。
项目详情
Kotti-2.0.9.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c8e417073a131987da50deaf0fee75205f82fe1d7118f080fae8debb618f8668 |
|
MD5 | 7c8ebf1242c04ec4a6b98b15455d8909 |
|
BLAKE2b-256 | c9e6c66ce9c60a17cf6e451b7a3bb59fd7390e9f95553dd797e41add5f23bf29 |