(aka: I'm Never Writing A CGI Ever Again)
Anthony Baxter, <firstname.lastname@example.org>
"Zope[tm] is a free, Open Source[tm] application server for building high-performance, dynamic web sites."
written in Python (mostly) and some C (for speed and nasty bits)
principia, aqueduct, &c - commercial
bobo, documenttemplate - open source
merged bobo & principia -> Zope
MS frontpage replacement
my zope.org area
screenshot shows basic stuff
ftp (emacs likes this)
Web-DAV (no unix clients :(
access control delegation - roles
simple server-side include
Zope Object Database
Instead of lots of files on disk
Tree-structured - objects can contain other objects (folderish)
Transaction-based - appends to file (revisions, rollback, undo)
Zope caches "hot" items from the ODB in memory - loads objects on demand.
based on where something is, rather than what it is
(normal OO as well)
users in the ODB
users in an SQL DB
/etc/passwd type file
NT domain (both from unix (smb) and windows)
External Methods/Python Methods
scripting in a web page
<h2>Results of your search</h2> <table> <dtml-in keywords_search> <tr> <td> <dtml-var pagetitle> </td> <td> <dtml-var pagerelevance>% </td> </tr> </dtml-in> </table>
some of the tags...
var - render another object
in - iterate over a list
if - conditional iteration
with - adds a new namespace
tree, call, sendmail, else, try, except, let, sql-blah, ...
break pages into reusable bits
external methods (& python methods)
database connections, mailhosts, ...
SQL Methods (and Database Adaptors)
.... other stuff
one of Zope's stronger points
makes working with databases almost enjoyable
select account, firstname, lastname from accounts <dtml-sqlgroup where required> <dtml-sqltest lastname type="string"> <dtml-or> <dtml-sqltest firstname type="string"> </dtml-sqlgroup>
can be called with either firstname or lastname
<dtml-in "usersearch(firstname='Anthony')"> Account: <dtml-var account>, (<dtml-var firstname> <dtml-var lastname>) </dtml-in>
MySQL, PostgreSQL, gadfly
Oracle, Sybase/MSSQL, ODBC, ...
automatic rollback (transactions)
Zope 2 supports multithreaded DB access (if DB supports it)
wrap a class around a result
Fast fulltext indexing of pages
Pages can be set up to "register" themselves with the Catalog
Can index on arbitrary attributes of objects
External Methods, Python Methods
Python code on disk (not in ODB - security worries)
Called as a normal object
Evan Simpson's little gem
Python code edited in the ODB
Byte compiler that removes "bad stuff"
Much easier to work with than external methods
Larger pieces of code
Provide a new type of object
eg, LDAP, dataminer, ...
requires knowledge of Python
get all the nice Zope stuff for free (persistence, transactions, &c.)
Can do anything that you can do in Python (but you have to behave and conform to the framework)
Restart to load new version (tedious!)
Define new objects through the web
properties, methods, subobjects, views, ...
can inherit from other products (python or zclass products)
All instances of a ZClass are linked to the zclass
Change the ZClass, all instances are immediately changed
Very new, lots of new and interesting little corners
As always, no-one wants to do it
DC have a full time techwriter now
zope.org how-tos, tips, &c.
CVS access - rate of increase ++
Mailing lists - Zope@Zope.org ~ 80 msgs/day
Not gatewayed to USENET (& hopefully never will be :)
www.zope.org - members area, product upload, docs
LDAP (others have since added to it)