[Checkins] SVN: zope2book/trunk/ First pass at ZopeArchitecture chapter.
Tres Seaver
tseaver at palladion.com
Tue Feb 10 09:30:57 EST 2009
Log message for revision 96385:
First pass at ZopeArchitecture chapter.
Changed:
A zope2book/trunk/Figures/zopearchitecture.gif
D zope2book/trunk/ZopeArchitecture.stx
A zope2book/trunk/source/ZopeArchitecture.rst
U zope2book/trunk/source/index.rst
-=-
Added: zope2book/trunk/Figures/zopearchitecture.gif
===================================================================
(Binary files differ)
Property changes on: zope2book/trunk/Figures/zopearchitecture.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Deleted: zope2book/trunk/ZopeArchitecture.stx
===================================================================
--- zope2book/trunk/ZopeArchitecture.stx 2009-02-10 14:07:34 UTC (rev 96384)
+++ zope2book/trunk/ZopeArchitecture.stx 2009-02-10 14:30:56 UTC (rev 96385)
@@ -1,290 +0,0 @@
-Zope Concepts and Architecture
-
- Fundamental Zope Concepts
-
- The Zope framework has several fundamental underlying concepts,
- each of which should be understand in order to make the most of your Zope
- experience.
-
- Zope Is a Framework
-
- Zope relieves the developer of most of the onerous details of
- Web application development, such as data persistence, data
- integrity, and access control, allowing one to focus instead on the
- problem at hand. It allows you to utilize the services it
- provides to build web applications more quickly than other
- languages or frameworks, and to write web
- application logic in the "Python":http://www.python.org/
- language. Zope also comes with two solutions that allow you
- to "template" text, XML, and HTML: the *Document Template Markup
- Language* (DTML), and *Zope Page Templates* (ZPT).
-
- Object Orientation
-
- Unlike common, file-based web template systems, such as ASP or
- PHP, Zope is a highly "object-oriented" web development
- platform. Object orientation is a concept that is shared
- between many different programming languages, including
- Python. The concept of
- object orientation may take a little "getting-used-to" if you're
- an old hand at procedural languages used for
- web scripting, such as Perl or PHP. However, you will easily grasp its
- main concepts by reading the "Object
- Orientation":ObjectOrientation.stx chapter, and by trying the hands-on
- examples in this book.
-
- Object Publishing
-
- The technology that would become Zope was founded on the
- realization that the Web is fundamentally object-oriented. A URL
- to a Web resource is really just a path to an object in a set of
- containers, and the HTTP protocol provides a way to send
- messages to that object and to request a response.
-
- Zope's object structure is hierarchical, which means that a
- typical Zope site is composed of objects that contain other
- objects (which may contain other objects, ad infinitum). URLs
- map naturally to objects in the hierarchical Zope environment
- based on their names. For example, the URL
- "/Marketing/index.html" could be used to access the Document
- object named "index.html" located in the Folder object named
- "Marketing".
-
- Zope's seminal duty is to *publish* the objects you create. The
- way it does this is conceptually straightforward:
-
- 1. Your web browser sends a request to the Zope server. The
- request specifies a URL in the form
- 'protocol://host:port/path?querystring"',
- e.g., 'http://www.zope.org:8080/Resources?batch_start=100'.
-
- 2. Zope separates the URL into its component "host", "port" "path"
- and "query string" portions ('http://www.zope.org', '8080',
- '/Resources' and '?batch_start=100', respectively).
-
- 3. Zope locates the object in its object database corresponding
- to the "path" ('/Resources').
-
- 4. Zope "executes" the object using the "query string" as a source
- of parameters that can modify the behavior of the object. This
- means that the object may behave differently depending on the
- values passed in the query string.
-
- 5. If the act of executing the object returns a value, the value
- is sent back to your browser. Typically a given Zope object
- returns HTML, file data, or image data.
-
- 6. The data is interpreted by the browser and shown to you.
-
- Mapping URLs to objects isn't a new idea. Web servers like Apache
- and Microsoft's IIS do the same thing: they translate URLs into
- files and directories on a file system. Zope similarly maps URLs
- to objects in its object database.
-
- A Zope object's URL is based on its *path*, which is composed of the
- 'ids' of its containing Folders and the object's 'id', separated
- by slash characters. For example, if you have a Zope "Folder"
- object in the root folder called *Bob*, then its path would be
- '/Bob'. If *Bob* is in a sub-folder called *Uncles*, then its URL
- would be '/Uncles/Bob'.
-
- There could also be other Folders in the Uncles folder called
- *Rick*, *Danny*, and *Louis*. You would access them through the web
- similarly::
-
- /Uncles/Rick
- /Uncles/Danny
- /Uncles/Louis
-
- The URL of an object is most simply composed of its 'host',
- 'port', and 'path'. For the Zope object with the path '/Bob'
- on the Zope server at 'http://localhost:8080', the URL would be
- 'http://localhost:8080/Bob'. Visting a URL of a Zope object
- directly is termed *calling the object through the web*. This
- causes the object to be evaluated and the result of the
- evaluation to be returned to your web browser.
-
- For a more detailed explanation of how Zope performs object
- publishing, see the "Object
- Publishing":http://www.zope.org/Documentation/ZDG/ObjectPublishing.stx
- chapter of the *Zope Developer's Guide*.
-
- Through-The-Web Management
-
- To create and work with Zope objects, you use your Web browser
- to access the *Zope management interface* (ZMI). All management and
- application development can be done completely through the Web
- using only a browser. The ZMI provides a
- familiar, Windows Explorer-like view of the Zope object
- system. Through the ZMI, a developer can create
- and script Zope objects, or even define new kinds of objects,
- without requiring access to the file system of the web server.
-
- Objects can be dropped in anywhere in the object hierarchy. Site
- managers can work with their objects by clicking on tabs that
- represent different "views" of an object. These views vary
- depending on the type of object. A "DTML Method" Zope object,
- for example, has an "Edit" tab, which allows you to edit the
- document's source; a "Database Connection" Zope object
- provides views that let you modify its connection string or
- caching parameters. All objects also have a
- "Security" view that allows you to manage their individual access control
- settings.
-
- Security and Safe Delegation
-
- One of the things that sets Zope apart from other application
- servers is that it was designed from the start to be tightly
- coupled with not only the Web object model, but also the Web
- development model. Today's successful web applications require
- the participation of many people across an organization with
- different areas of expertise. Zope is specifically designed to
- accommodate this model, allowing site managers to safely
- delegate control to design experts, database experts, and content
- managers.
-
- A successful Web site requires the collaboration of many people
- people in an organization: application developers, SQL experts,
- content managers, and often even the end users of the
- application. On a conventional Web site, maintenance and
- security can quickly become problematic: how much control do you
- give to the content manager? How does giving the content manager
- a user account affect your security? What about that SQL code embedded
- in the ASP files he'll be working on -- code that probably
- exposes your database login?
-
- Objects in Zope provide a robust set of possible
- permissions, richer than that of a conventional file-based system. Permissions
- vary by object type, based on the capabilities of that
- object, which enables the implementation of fine-grained access
- control. For example, you can set access control so that content
- managers can use "SQL Method" objects without being able to change them or
- even view their source. You can also set restrictions so that a
- user can only create certain kinds of objects, for instance,
- "Folders" and "DTML Documents," but not "SQL Methods" or other
- objects.
-
- Zope provides the capability to manage users through the web via
- *User Folders*, which are special folders that contain user
- information. Several Zope add-ons are available that provide
- extended types of User Folders that get their user data from
- external sources, such as relational databases or LDAP
- directories. The ability to add new User Folders can be
- delegated to users within a sub-folder, essentially allowing you
- to delegate the creation and user management of subsections of
- your website to semi-trusted users, without having to worry about those
- users changing the objects "above" their own folder.
-
- Native Object Persistence and Transactions
-
- By default, Zope objects are stored in a high-performance, transactional
- object database known as the *Zope Object Database* (ZODB). Each
- web request is treated as a separate transaction by the ZODB.
- If an error occurs in your application during a
- request, any changes made during the request will be
- automatically rolled back. The ZODB also provides
- multi-level undo, allowing a site manager to "undo" changes to
- the site with the click of a button. The Zope framework makes
- all of the details of persistence and transactions totally
- transparent to the application developer. Relational databases,
- when used with Zope, can also play in Zope's transactional
- framework.
-
- Acquisition
-
- One of the most powerful aspects of Zope is *acquisition*, whose
- core concepts are simply that:
-
- * Zope objects are contained inside other objects (such as Folders).
-
- * Objects can "acquire" attributes and behavior from
- their containers.
-
- The concept of acquisition works with all Zope objects and
- provides an extremely powerful way to centralize common
- resources. A commonly-used SQL query or snippet of HTML, for
- example, can be defined in one Folder, and objects in sub-folders
- can use it automatically through acquisition. If the query needs
- to be changed, you can change it in one place without worrying
- about all of the sub-objects that use the same query.
-
- If you are familiar with *Cascading Style Sheets* (CSS), you already know how an element in an
- HTML document can inherit cascading properties from its parent or
- ancestor elements. Containment acquisition
- works in the same fashion: if a document X is contained in folder Y,
- document X can access the attributes of folder Y through acquisition.
- Note that some advanced aspects of acquisition may break
- this analogy; these are discussed in the
- "Advanced Zope Scripting":ScriptingZope.stx chapter.
-
- Because objects are acquired by starting at the current level in
- their containment hierarchy and searching upward, it is easy to
- specialize areas of your site with a minimum level of work. If, for
- example, you had a Folder named "Sports" on your site containing
- sports-related content, you could create a new header and footer
- document in the Sports Folder that use a sports-related
- theme. Content in the Sports folder and its sub-folders will then
- use the specialized sports-related header and footer found in the
- Sports Folder, rather than the site's main header and footer.
-
- Acquisition is explained in further detail in the chapter on
- "Acquisition":Acquisition.stx .
-
- Zope Is Extensible
-
- Zope is highly extensible, and advanced users can create new
- types of Zope objects, either by writing new Zope add-ons in
- Python, or by building them entirely through the Web. The Zope
- software provides a number of useful, built-in components to aid
- extension authors in development, including a robust set of framework classes
- that take care of most of the details of implementing new Zope
- objects.
-
- A number of Zope add-on products are available that provide
- features like drop-in web discussion topics, desktop data
- publishing, XML tools, and e-commerce integration. Many of these
- products have been written by highly active members of the
- Zope community, and most are also open source.
-
- Fundamental Zope Components
-
- Zope consists of several different components that work together
- to help you build web applications. Zope's fundamental components
- are shown in the following figure and explained below:
-
- "Zope Architecture":img:2-1:Figures/zopearchitecture.gif
-
- ZServer -- Zope comes with a built-in web server that serves
- content to you and your users. This web server also serves Zope
- content via FTP, WebDAV, and XML-RPC (a remote procedure call
- facility).
-
- Web Server -- Of course, you may already have an existing web
- server, such as Apache or Microsoft IIS, and you may not want
- to use Zope's web server. Zope works with these servers also, and any
- other web server that supports the Common Gateway Interface (CGI).
- In production environments, it can be advantageous to run a server
- like Apache or Squid "in front of" Zope in order to help sanitize
- incoming requests, augment its capabilities (e.g., terminate HTTPS
- connections), and cache Zope-provided content.
-
- Zope Core -- This is the engine that coordinates Zope activity,
- driving its management interface and object database.
-
- Object Database -- When you work with Zope, you are usually
- working with objects that are stored in the ZODB.
-
- Relational database -- You don't have to store your information in
- Zope's object database if you don't want to. Zope also works with
- other relational databases, including *Oracle*, *PostgreSQL*,
- *Sybase*, and *MySQL*.
-
- File System -- Zope can, of course, work with documents and other
- files stored on your server's file system.
-
- ZClasses -- Zope allows site managers to add new object types to
- Zope using the ZMI. These new object types are called *ZClasses*.
-
- Products -- Zope also allows site managers to add new, pre-built object types
- to Zope by installing *Product* files on the Zope server
- file system.
Added: zope2book/trunk/source/ZopeArchitecture.rst
===================================================================
--- zope2book/trunk/source/ZopeArchitecture.rst (rev 0)
+++ zope2book/trunk/source/ZopeArchitecture.rst 2009-02-10 14:30:56 UTC (rev 96385)
@@ -0,0 +1,320 @@
+##############################
+Zope Concepts and Architecture
+##############################
+
+Fundamental Zope Concepts
+=========================
+
+The Zope framework has several fundamental underlying concepts,
+each of which should be understand in order to make the most of your Zope
+experience.
+
+Zope Is a Framework
+-------------------
+
+Zope relieves the developer of most of the onerous details of
+Web application development, such as data persistence, data
+integrity, and access control, allowing one to focus instead on the
+problem at hand. It allows you to utilize the services it
+provides to build web applications more quickly than other
+languages or frameworks, and to write web
+application logic in the `Python <http://www.python.org/>`_
+language. Zope also comes with two solutions that allow you
+to "template" text, XML, and HTML: the *Document Template Markup
+Language* (DTML), and *Zope Page Templates* (ZPT).
+
+Object Orientation
+------------------
+
+Unlike common, file-based web template systems, such as ASP or
+PHP, Zope is a highly "object-oriented" web development
+platform. Object orientation is a concept that is shared
+between many different programming languages, including
+Python. The concept of
+object orientation may take a little "getting-used-to" if you're
+an old hand at procedural languages used for
+web scripting, such as Perl or PHP. However, you will easily grasp its
+main concepts by reading the `Object Orientation <ObjectOrientation.html>`_
+chapter, and by trying the hands-on examples in this book.
+
+Object Publishing
+------------------
+
+The technology that would become Zope was founded on the
+realization that the Web is fundamentally object-oriented. A URL
+to a Web resource is really just a path to an object in a set of
+containers, and the HTTP protocol provides a way to send
+messages to that object and to request a response.
+
+Zope's object structure is hierarchical, which means that a
+typical Zope site is composed of objects that contain other
+objects (which may contain other objects, ad infinitum). URLs
+map naturally to objects in the hierarchical Zope environment
+based on their names. For example, the URL
+"/Marketing/index.html" could be used to access the Document
+object named "index.html" located in the Folder object named
+"Marketing".
+
+Zope's seminal duty is to *publish* the objects you create. The
+way it does this is conceptually straightforward:
+
+1. Your web browser sends a request to the Zope server. The
+ request specifies a URL in the form
+ 'protocol://host:port/path?querystring"',
+ e.g., 'http://www.zope.org:8080/Resources?batch_start=100'.
+
+2. Zope separates the URL into its component "host", "port" "path"
+ and "query string" portions ('http://www.zope.org', '8080',
+ '/Resources' and '?batch_start=100', respectively).
+
+3. Zope locates the object in its object database corresponding
+ to the "path" ('/Resources').
+
+4. Zope "executes" the object using the "query string" as a source
+ of parameters that can modify the behavior of the object. This
+ means that the object may behave differently depending on the
+ values passed in the query string.
+
+5. If the act of executing the object returns a value, the value
+ is sent back to your browser. Typically a given Zope object
+ returns HTML, file data, or image data.
+
+6. The data is interpreted by the browser and shown to you.
+
+Mapping URLs to objects isn't a new idea. Web servers like Apache
+and Microsoft's IIS do the same thing: they translate URLs into
+files and directories on a file system. Zope similarly maps URLs
+to objects in its object database.
+
+A Zope object's URL is based on its *path*, which is composed of the
+'ids' of its containing Folders and the object's 'id', separated
+by slash characters. For example, if you have a Zope "Folder"
+object in the root folder called *Bob*, then its path would be
+'/Bob'. If *Bob* is in a sub-folder called *Uncles*, then its URL
+would be '/Uncles/Bob'.
+
+There could also be other Folders in the Uncles folder called
+*Rick*, *Danny*, and *Louis*. You would access them through the web
+similarly::
+
+ /Uncles/Rick
+ /Uncles/Danny
+ /Uncles/Louis
+
+The URL of an object is most simply composed of its 'host',
+'port', and 'path'. For the Zope object with the path '/Bob'
+on the Zope server at ``http://localhost:8080/``, the URL would be
+``http://localhost:8080/Bob``. Visting a URL of a Zope object
+directly is termed *calling the object through the web*. This
+causes the object to be evaluated and the result of the
+evaluation to be returned to your web browser.
+
+For a more detailed explanation of how Zope performs object
+publishing, see the `Object Publishing chapter
+<http://www.zope.org/Documentation/ZDG/ObjectPublishing.stx>`_
+of the *Zope Developer's Guide*.
+
+Through-The-Web Management
+--------------------------
+
+To create and work with Zope objects, you use your Web browser
+to access the *Zope management interface* (ZMI). All management and
+application development can be done completely through the Web
+using only a browser. The ZMI provides a
+familiar, Windows Explorer-like view of the Zope object
+system. Through the ZMI, a developer can create
+and script Zope objects, or even define new kinds of objects,
+without requiring access to the file system of the web server.
+
+Objects can be dropped in anywhere in the object hierarchy. Site
+managers can work with their objects by clicking on tabs that
+represent different "views" of an object. These views vary
+depending on the type of object. A "DTML Method" Zope object,
+for example, has an "Edit" tab, which allows you to edit the
+document's source; a "Database Connection" Zope object
+provides views that let you modify its connection string or
+caching parameters. All objects also have a
+"Security" view that allows you to manage their individual access control
+settings.
+
+Security and Safe Delegation
+----------------------------
+
+One of the things that sets Zope apart from other application
+servers is that it was designed from the start to be tightly
+coupled with not only the Web object model, but also the Web
+development model. Today's successful web applications require
+the participation of many people across an organization with
+different areas of expertise. Zope is specifically designed to
+accommodate this model, allowing site managers to safely
+delegate control to design experts, database experts, and content
+managers.
+
+A successful Web site requires the collaboration of many people
+people in an organization: application developers, SQL experts,
+content managers, and often even the end users of the
+application. On a conventional Web site, maintenance and
+security can quickly become problematic: how much control do you
+give to the content manager? How does giving the content manager
+a user account affect your security? What about that SQL code embedded
+in the ASP files he'll be working on -- code that probably
+exposes your database login?
+
+Objects in Zope provide a robust set of possible
+permissions, richer than that of a conventional file-based system. Permissions
+vary by object type, based on the capabilities of that
+object, which enables the implementation of fine-grained access
+control. For example, you can set access control so that content
+managers can use "SQL Method" objects without being able to change them or
+even view their source. You can also set restrictions so that a
+user can only create certain kinds of objects, for instance,
+"Folders" and "DTML Documents," but not "SQL Methods" or other
+objects.
+
+Zope provides the capability to manage users through the web via
+*User Folders*, which are special folders that contain user
+information. Several Zope add-ons are available that provide
+extended types of User Folders that get their user data from
+external sources, such as relational databases or LDAP
+directories. The ability to add new User Folders can be
+delegated to users within a sub-folder, essentially allowing you
+to delegate the creation and user management of subsections of
+your website to semi-trusted users, without having to worry about those
+users changing the objects "above" their own folder.
+
+Native Object Persistence and Transactions
+------------------------------------------
+
+By default, Zope objects are stored in a high-performance, transactional
+object database known as the *Zope Object Database* (ZODB). Each
+web request is treated as a separate transaction by the ZODB.
+If an error occurs in your application during a
+request, any changes made during the request will be
+automatically rolled back. The ZODB also provides
+multi-level undo, allowing a site manager to "undo" changes to
+the site with the click of a button. The Zope framework makes
+all of the details of persistence and transactions totally
+transparent to the application developer. Relational databases,
+when used with Zope, can also play in Zope's transactional
+framework.
+
+Acquisition
+-----------
+
+One of the most powerful aspects of Zope is *acquisition*, whose
+core concepts are simply that:
+
+* Zope objects are contained inside other objects (such as Folders).
+
+* Objects can "acquire" attributes and behavior from
+ their containers.
+
+The concept of acquisition works with all Zope objects and
+provides an extremely powerful way to centralize common
+resources. A commonly-used SQL query or snippet of HTML, for
+example, can be defined in one Folder, and objects in sub-folders
+can use it automatically through acquisition. If the query needs
+to be changed, you can change it in one place without worrying
+about all of the sub-objects that use the same query.
+
+If you are familiar with *Cascading Style Sheets* (CSS), you already
+know how an element in an HTML document can inherit cascading properties
+from its parent or ancestor elements. Containment acquisition
+works in the same fashion: if a document X is contained in folder Y,
+document X can access the attributes of folder Y through acquisition.
+Note that some advanced aspects of acquisition may break
+this analogy; these are discussed in the
+`Advanced Zope Scripting <ScriptingZope.html>`_ chapter.
+
+Because objects are acquired by starting at the current level in
+their containment hierarchy and searching upward, it is easy to
+specialize areas of your site with a minimum level of work. If, for
+example, you had a Folder named "Sports" on your site containing
+sports-related content, you could create a new header and footer
+document in the Sports Folder that use a sports-related
+theme. Content in the Sports folder and its sub-folders will then
+use the specialized sports-related header and footer found in the
+Sports Folder, rather than the site's main header and footer.
+
+Acquisition is explained in further detail in the chapter on
+`Acquisition <Acquisition.html>`_ .
+
+Zope Is Extensible
+------------------
+
+Zope is highly extensible, and advanced users can create new
+types of Zope objects, either by writing new Zope add-ons in
+Python, or by building them entirely through the Web. The Zope
+software provides a number of useful, built-in components to aid
+extension authors in development, including a robust set of framework classes
+that take care of most of the details of implementing new Zope
+objects.
+
+A number of Zope add-on products are available that provide
+features like drop-in web discussion topics, desktop data
+publishing, XML tools, and e-commerce integration. Many of these
+products have been written by highly active members of the
+Zope community, and most are also open source.
+
+Fundamental Zope Components
+===========================
+
+Zope consists of several different components that work together
+to help you build web applications. Zope's fundamental components
+are shown in the following figure and explained below:
+
+.. image:: ../Figures/zopearchitecture.gif
+
+ZServer
+-------
+
+Zope comes with a built-in web server that serves content to you and your
+users. This web server also serves Zope content via FTP, WebDAV, and
+XML-RPC (a remote procedure call facility).
+
+Web Server
+----------
+
+Of course, you may already have an existing web server, such as Apache or
+Microsoft IIS, and you may not want to use Zope's web server. Zope works
+with these servers also, and any other web server that supports the
+Common Gateway Interface (CGI). In production environments, it can be
+advantageous to run a server like Apache or Squid "in front of" Zope in
+order to help sanitize incoming requests, augment its capabilities (e.g.,
+terminate HTTPS connections), and cache Zope-provided content.
+
+Zope Core
+---------
+
+This is the engine that coordinates Zope activity, driving its management
+interface and object database.
+
+Object Database
+---------------
+
+When you work with Zope, you are usually working with objects that are
+stored in the ZODB.
+
+Relational database
+-------------------
+You don't have to store your information in Zope's object database if you
+don't want to. Zope also works with other relational databases,
+including *Oracle*, *PostgreSQL*, *Sybase*, and *MySQL*.
+
+File System
+-----------
+
+Zope can, of course, work with documents and other files stored on your
+server's file system.
+
+ZClasses
+--------
+
+Zope allows site managers to add new object types to Zope using the ZMI.
+These new object types are called *ZClasses*.
+
+Products
+--------
+
+Zope also allows site managers to add new, pre-built object types to Zope
+by installing *Product* files on the Zope server file system.
Modified: zope2book/trunk/source/index.rst
===================================================================
--- zope2book/trunk/source/index.rst 2009-02-10 14:07:34 UTC (rev 96384)
+++ zope2book/trunk/source/index.rst 2009-02-10 14:30:56 UTC (rev 96385)
@@ -14,6 +14,7 @@
Preface.rst
IntroducingZope.rst
Contributions.rst
+ ZopeArchitecture.rst
Indices and tables
More information about the Checkins
mailing list