(aka: I'm Never Writing A CGI Ever Again)
Anthony Baxter, <[email protected]>
"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
through-the-web editing
undo
screenshot shows basic stuff
ftp (emacs likes this)
Web-DAV (no unix clients :(
XML import/export
versions
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)
access control
object lookup
users in the ODB
users in an SQL DB
/etc/passwd type file
NT domain (both from unix (smb) and windows)
LDAP
IMAP
DTML scripting
SQL integration
External Methods/Python Methods
ZClasses
scripting in a web page
eg
<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>
PHP-like
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
images
files
searchable things
external methods (& python methods)
database connections, mailhosts, ...
SQL Methods (and Database Adaptors)
ZCatalogs
Tinytables
.... other stuff
one of Zope's stronger points
makes working with databases almost enjoyable
eg
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
eg
<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)
Pluggable Brains
Direct Traversal
Result Caching
computed results
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 Products
ZClasses
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
XML Document
Squishdot
KM|Net News
Portal Toolkit
NotMail
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 - [email protected] ~ 80 msgs/day
Not gatewayed to USENET (& hopefully never will be :)
www.zope.org - members area, product upload, docs
dataminer
LDAP (others have since added to it)
SNMP
RADIUS
workflow engine