目标:分析plone中zodb数据库,能通过直接操作数据库对plone进行设置和显示
有关zodb数据的操作可参考:http://xiaolin0199.iteye.com/blog/2019678
由于zodb中的数据是以层次结构存储的,就像一个一个文件夹一样,而plone就是一个大的文件夹,里面还嵌套着很多个文件夹,现在就是要看看这个大文件夹的数据结构
现在以本地Plone为例,通过ZEO去连接数据库,就像打开文件夹一样,一步一步的进入文件夹查看内容
首先找到根目录
from ZEO.ClientStorage import ClientStorage from ZODB import DB from myzodb import MyZODB, transaction class MyRemoteZODB(object): def __init__(self, server, port): server_and_port = (server, port) self.storage = ClientStorage(server_and_port) self.db = DB(self.storage) self.connection = self.db.open() self.dbroot = self.connection.root() def close(self): self.connection.close() self.db.close() self.storage.close() mydb = MyRemoteZODB('localhost', 8100) dbroot = mydb.dbroot
上面的代码就是通过本地端口8100的zeo访问zodb,而dbroot就是根目录,接着我们打开这个根目录
>>>print dbroot.keys() ['Application'] >>>application = dbroot['Application'] >>>print application.keys() ['Control_Panel', 'temp_folder', 'session_data_manager', 'browser_id_manager', 'error_log', 'favicon.ico', 'standard_error_message', 'index_html', 'virtual_hosting', 'MyPlone', 'acl_users'] >>>myplone = application['MyPlone'] >>>print myplone.keys() ['portal_setup', 'MailHost', 'caching_policy_manager', 'content_type_registry', 'error_log',...]
上面的代码相当于:
>>>ls dbroot Application >>>cd Application >>>ls 'Control_Panel', 'temp_folder', 'session_data_manager', 'browser_id_manager', 'error_log', 'favicon.ico', 'standard_error_message', 'index_html', 'virtual_hosting', 'MyPlone', 'acl_users' >>>cd MyPlone >>>ls 'portal_setup', 'MailHost', 'caching_policy_manager', 'content_type_registry', 'error_log',...
结构比较清楚,跟zmi后台显示的是对应的,但里面的内容虽然显示的是字符串,但其实都是一个一个zope定义的类,要弄清这些类的添加使用就比较困难了
现在对一个简单的类测试下:
先在zmi后台/MyPlone目录下创建一个Page Template,名为mytest,里面默认显示的代码是
<html> <head> <title tal:content="template/title">The title</title> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> <h2><span tal:replace="here/title_or_id">content title or id</span> <span tal:condition="template/title" tal:replace="template/title">optional template title</span></h2> This is Page Template <em tal:content="template/id">template id</em>. </body> </html>
现尝试通过直接操作zodb修改里面的代码
尝试步骤:
1.进入MyPlone,会发现刚创建的mytest
>>>myplone = application['MyPlone'] >>>print myplone.keys() ['portal_setup', 'MailHost', 'caching_policy_manager', 'content_type_registry', 'error_log',...'mytest']
2.赋值mytest,通过dir查看方法,发现有read和write的方法
>>>mytest = myplone['mytest'] >>>print mytest <ZopePageTemplate at mytest> >>>print mytest.read() <html> <head> <title tal:content="template/title">The title</title> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> <h2><span tal:replace="here/title_or_id">content title or id</span> <span tal:condition="template/title" tal:replace="template/title">optional template title</span></h2> This is Page Template <em tal:content="template/id">template id</em>. </body> </html> >>>mytest.write("<html></html>") >>>transaction.commit()
3.最后在zmi后台再查看totest,发现代码已经改变了
<html></html>
相关推荐
它作为Zope Interface Database (ZODB) 和 MySQL数据库之间的桥梁,允许Plone站点直接操作MySQL数据库,实现了对非原生ZODB数据存储的兼容性。ZMySQLdb基于Python的DB-API 2.0规范,这使得它与其他Python数据库接口...
5. **安装过程**: 安装程序会自动下载并安装所需的依赖,如Zope、ZODB(Zope Object Database)和其他Plone相关的库。这个过程可能需要一段时间,取决于你的网络速度。 6. **启动Plone**: 安装完成后,你可以通过...
使用ZODB,开发者可以创建自定义的Python类并直接将它们存储在数据库中,通过简单的对象操作即可实现数据的增删改查。此外,ZODB还提供了事务管理功能,确保数据的一致性和完整性。事务可以确保在发生错误时能够回滚...
Plone是一个开源的企业级内容管理框架,基于Zope应用服务器和ZODB对象数据库。`dexterity`库为Plone带来了现代Web开发的灵活性和可扩展性,让开发者能够轻松创建自定义的内容模型,而不必深入到复杂的Zope组件架构中...
3. **ZODB(Zope Object Database)**:Zope的对象数据库,存储对象数据,支持事务处理、历史版本记录和多层撤销功能。 4. **ZEO(Zope Enterprise Objects)**:Zope的企业对象服务器,用于负载均衡、容错和分布式...
值得注意的是,使用这个库需要对Plone和Python有一定的了解,特别是Zope对象数据库(ZODB)的概念,以及如何在Plone环境中配置和扩展服务。同时,由于涉及到用户数据和权限管理,因此在实际部署时必须确保遵循安全...
在文件系统方面,Guillotina使用了Plone的ZODB(Zope Object Database)作为默认存储,这是一种对象数据库,可以将Python对象直接持久化到磁盘。然而,Guillotina也支持多种存储后端,包括MongoDB、PostgreSQL等,这...
为了更好地利用这个库,开发者需要熟悉Plone的API和Zope对象数据库(ZODB)的概念,同时,了解Python的模块化和面向对象编程也是必不可少的。通过结合这些技术,开发者可以构建出强大的多语言Plone站点,为全球用户...
在需要重新索引对象的安全性的情况下,例如,当通过@@sharing 视图向用户或组添加角色时,正在使用共享表单的对象及其内容中的所有后代对象树无条件地从数据库 (ZODB) 中获取,并且它们的安全属性 ...
4. **Plone**:Plone是基于Zope的最著名的CMS之一,书中可能会提及Plone的安装、配置和扩展,以及如何使用Plone构建复杂的网站。 5. **内容对象和内容类型**:Zope允许创建自定义的内容对象和内容类型,书里会解释...
3. ZODB:Zope Object Database,它是Zope内置的持久化对象数据库,可以直接存储Python对象,但有时对于大规模的数据存储,Zope会与MySQL这样的关系数据库配合使用。 二、Zope与MySQL的集成 1. 数据库连接:通过DB...
此外,Plone 使用 Zope Object Database (ZODB) 来存储内容,这是一种面向对象的数据库,可以方便地处理大量非结构化数据。 AmsterDAM 的关键特性可能包括: 1. **权限管理**:Plone 提供精细的权限控制,允许用户...
6. **ZODB(Zope Object Database)**:Zope对象数据库是一个内置的持久化机制,将Python对象直接存储为数据库条目,无需额外的ORM(对象关系映射)层。这种设计提供了高效的数据存取和事务处理能力。 7. **Zope...
系统采用先进的存储技术,如对象数据库ZODB和文件库FRS,解决了传统CMS系统在处理大量数据和大文件时可能遇到的问题,保证了高性能和对大文件及流媒体的良好支持。 此外,润普EDMS支持多级别协同管理,鼓励企业内部...