Main Page Content
Zope explained
Rated 3.83 (Ratings: 4) (Add your rating)
Log in to add a comment
(3 comments so far)
Note: this was originally written by Dave Parker on the Northeast Wisconsin Linux User Group mailing list. I've posted it with permission from him. - .djc.
I want to explain better what Zope is - it really is a *very* different
way of thinking about web programming and web publishing. The trick
with zope is understanding just what it's all about in the first place.
I think it's going to still come off kind of abstract, but I'll try to
give some concrete examples and drive it down to the real world
eventually.
My first thought was "oh, a web based publishing environment with
database ties - interesting". But that's really giving it a seriously
short shrift.
Zope is much more like a Smalltalk
(pure OO) environment that is tightly
bound (inextricably wedded) to the web (http), complete with all the OOP
essentials: encapsulation, inheritance, and polymorphism. All of the
native objects live in a multi-threaded, multi-user object database.
The object database is *not* a relational database backend - it's a real
object database with oids and optimistic locking and all that. Zope
also has facilities called "database adapters" which allow you to
exploit an elegant (nearly transparent) object to relational mapping
mechanism.
Within all that is an authentication/authorization system. Users have
roles. All non-user objects in the system have permissions, which map
to roles (which are infinitely definable). Permission to role mappings
can selectively be inherited from parent objects or defined at the level
of any given object regardless of parent mappings. So the granularity
of authorization is extremely fine (if you want it to be).
The authentication system by default relies on user objects that are
defined in the object database. But since the authentication system is
a component like anything else, it's possible to install alternative
systems that authenticate off of other sources, like relational
databases or flatfiles or LDAP servers or IMAP servers. Depending on
the capabilities of the authentication backend, you can actually have as
much flexibility with them as you can with the native system (roles
etc). LDAP would allow this for example.
The eventual goal of all that is to let you create dynamic (and static)
web content.
"Publishing" in the zope environment is 100% web based - you will
**NEVER** be at a command prompt - all interaction with Zope occurs
through http or ftp (primarily http).
The most basic type of publishing is the familiar "create content with
your local HTML WYSIWYG editor and publish with http PUT or ftp" thing.
From the perspective of http PUT and ftp, Zope's object environment
appears to be a filesystem of the ordinary sort, and your content shows
up as expected.
When you publish to zope in this way, you take advantage of the two most
basic types of "products" (roughly "classes", but they're more involved
than that): "Folders" and "DTML Documents". These will be generated for
you automatically.
If you choose to work directly with Zope via it's web interface, you'll
work more directly with "products" and you'll have a much wider variety
of them at your disposal (plus you can create new ones, package them up,
and distribute them).
The key to dynamic publishing in Zope is it's "DTML" language. DTML is
a superset of html that ties tightly with the object database and the
O-R mapping mechanism. The genius of it lies in it's layering of
namespaces as relates to your current context - and the fact that all of
*that* maps to http (read: URLS) automatically.
PHP is just a scripting language - really leagues away from what Zope is
(PHP is closer to Perl w/extensions than it is to Zope).
To really figure it out, you have to work with it. If people are really
interested we can do a demo (I'd be glad to do it). Otherwise, get an
account at http://www.zope.org or set one up yourself and play with it.
The more you use it, the more you find.



