On ZODB:
Another way to ask: "What is the real purpose of ZODB?" ask: "Why was the ZODB created?"
The answer to this question: the project was started very early, around 1996. This was before the existence of MySQL or PostgreSQL, when the miniSQL database (free, but not free software) was still used, or large monetary databases such as Oracle. Python has provided a brine module for serializing Python objects to disk, but lower-level serialization does not allow functions such as transactions, concurrent writes, and replication. This is what ZODB provides.
It is still used today at Zope because it works well. If you do not have an existing skill set in real-life databases, it’s easier to learn how to use ZODB than a relational database. It also allows you to use simpler use cases, for example, if you have a script command line that needs to store some configuration information, using a relational database means you need to start the database server to save a little configuration. You can use the configuration file, but ZODB also works very well, because it is an embedded database. This means that the database works in the same process as the rest of your Python code.
It is also worth noting that the API used to store objects inside containers differs between Zope 2 and Zope 3. In Zope 2, containers are stored as attributes:
root.mycontainer.myattr
In Zope 3, they use the same interface as the standard Python dictionary type:
root['mycontainer']myattr
This is another reason it’s easier to learn ZODB than Django ORM, because Django has its own interface for ORM, which is different from existing Python interfaces.
Over the Internet (TTW):
Again, an understanding of the reason TTW dates back to when Zope was developed. Although it seems silly to break with well-known developer tools such as Subversion or Mercurial, Zope was developed in the late 90s when CVS was the only free version control system. Zope 2 had its simple version control features, and they were as good as CVS (that is, "they were limited and juicy"). Then UNIX workstations cost a lot more money and had much less resources, so system administrators were much more careful and cautious about server management. TTW allowed people who normally could not upload code to the server using sysadmin intervation, a way to do this.
With text editors, emacs and vi had ftp modes, and Zope 2 can listen on the FTP port. This will allow you to evolve so that the code is stored in ZODB (editable TTW), but it is customary to edit this code using emacs or vi.
Today in Zope, TTW is less commonly used or promoted since it no longer makes sense to do so. Disk space is cheap, servers are (relatively) cheap, and there are many tools for developers who expect to interact with a standard file system.
Acquisition:
It was a mistake. It was a very confusing feature that caused a lot of unexpected events. In theory, there are some interesting ideas for acquisitions, but in practice they are best thrown into the basket and are almost never used.
Migrating from Django to Zope:
Work began with Zope 3 in 2001. This fixed many problems with Zope 2. This is evidence from the Zope community that Zope 2 is still active and well supported, but it is unlikely to be up to date. Zope 2 is really interesting only from a historical point of view.
Zope 3 has evolved in several different directions, and therefore modern incarnations of Zope are best expressed as Grok, BFG or Bobo.
Grok is closest to Zope 3, and, as such, is a fairly large structure — it can be quite overwhelming from time to time when the code base sneaks through it. However, like Django or any other full-stack structure, you don’t need to use every part of Grok, it’s pretty easy to learn the basic ones and build web applications with it. This standard configuration is unmatched, and its cool views provide a much denser, possibly cleaner code base than the Django web application. This URL routing system is extremely flexible, but perhaps too redesigned.
BFG is a "pay for what you eat" written by longtime Zope developer Chris McDonough. Thus, it is closer to the Pylons in spirit, which includes only parts that are considered basic or essential to the frame. It also goes well with WSGI. It uses only a few basic Zope packages.
Bobo is a micro-frame. This is just a way to route URLs and serve the application. It does not use any Zope packages, therefore it does not belong to the Zope web frameworks family. But it was written by Zop's creator, Jim Fulton, who originally called the publishing part of Zop "Bobo." The original Bobo, written in the early 90s, matched the URLs with packages and modules, so if your source code was laid out as:
mypackage.mymodule.MyClass
You may have a url like:
/mypackage/mymodule/MyClass
It was very inflexible and was replaced by the Traversel URL in Zope 2, which is pretty tricky. Bobo uses Routes, so he is an intermediate between dead simple URL resolution and complex URL resolution - about the same complexity as Django's URL resolution mechanism.