summaryrefslogtreecommitdiff
path: root/docs/tutorials/wiki/basiclayout.rst
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2010-10-25 17:40:43 -0400
committerChris McDonough <chrism@plope.com>2010-10-25 17:40:43 -0400
commite53e13423685eac190676c4be32716c3a42603e4 (patch)
treea28909e6aa70ed35977d4fa7e7af8ce6e0cb7332 /docs/tutorials/wiki/basiclayout.rst
parentae8e4ad63449212da28c6a169c36aac54ed38a9e (diff)
downloadpyramid-e53e13423685eac190676c4be32716c3a42603e4.tar.gz
pyramid-e53e13423685eac190676c4be32716c3a42603e4.tar.bz2
pyramid-e53e13423685eac190676c4be32716c3a42603e4.zip
rename bfgwiki to wiki
Diffstat (limited to 'docs/tutorials/wiki/basiclayout.rst')
-rw-r--r--docs/tutorials/wiki/basiclayout.rst137
1 files changed, 137 insertions, 0 deletions
diff --git a/docs/tutorials/wiki/basiclayout.rst b/docs/tutorials/wiki/basiclayout.rst
new file mode 100644
index 000000000..2649a345f
--- /dev/null
+++ b/docs/tutorials/wiki/basiclayout.rst
@@ -0,0 +1,137 @@
+============
+Basic Layout
+============
+
+The starter files generated by the ``pyramid_zodb`` template are basic,
+but they provide a good orientation for the high-level patterns common
+to most :term:`traversal` -based :mod:`pyramid` (and :term:`ZODB`
+based) projects.
+
+The source code for this tutorial stage can be browsed via
+`http://github.com/Pylons/pyramid/tree/master/docs/tutorials/wiki/src/basiclayout/
+<http://github.com/Pylons/pyramid/tree/master/docs/tutorials/wiki/src/basiclayout/>`_.
+
+``__init__.py``
+---------------
+
+A directory on disk can be turned into a Python :term:`package` by
+containing an ``__init__.py`` file. Even if empty, this marks a
+directory as a Python package.
+
+Configuration With ``configure.zcml``
+--------------------------------------
+
+The ``pyramid_zodb`` template uses :term:`ZCML` to perform system
+configuration. The ZCML file generated by the template looks like the
+following:
+
+ .. literalinclude:: src/basiclayout/tutorial/configure.zcml
+ :linenos:
+ :language: xml
+
+#. *Line 1*. The root ``<configure>`` element.
+
+#. *Line 4*. Boilerplate, the comment explains.
+
+#. *Lines 6-10*. Register a ``<view>`` that names a ``context`` type
+ that is a class. ``.views.my_view`` is a *function* we write
+ (generated by the ``pyramid_zodb`` template) that is given a
+ ``context`` object and a ``request`` and which returns a
+ dictionary. The ``renderer`` tag indicates that the
+ ``templates/mytemplate.pt`` template should be used to turn the
+ dictionary returned by the view into a response.
+ ``templates/mytemplate.pt`` is a *relative* path: it names the
+ ``mytemplate.pt`` file which lives in the ``templates``
+ subdirectory of the directory in which this ``configure.zcml``
+ lives in. In this case, it means it lives in the ``tutorial``
+ package's ``templates`` directory as ``mytemplate.pt``
+
+ Since this ``<view>`` doesn't have a ``name`` attribute, it is the
+ "default" view for that class.
+
+#. *Lines 12-15*. Register a ``static`` view which answers requests
+ which start with ``/static``. This is a view that will serve up
+ static resources for us, in this case, at
+ ``http://localhost:6543/static/`` and below. The ``path`` element
+ of this tag is a relative directory name, so it finds the resources
+ it should serve within the ``templates/static`` directory inside
+ the ``tutorial`` package.
+
+Content Models with ``models.py``
+---------------------------------
+
+:mod:`pyramid` often uses the word :term:`model` when talking about
+content resources arranged in the hierarchical *object graph*
+consulted by :term:`traversal`. The ``models.py`` file is where the
+``pyramid_zodb`` Paster template put the classes that implement our
+model objects.
+
+Here is the source for ``models.py``:
+
+ .. literalinclude:: src/basiclayout/tutorial/models.py
+ :linenos:
+ :language: py
+
+#. *Lines 3-4*. The ``MyModel`` class we referred to in the ZCML file
+ named ``configure.zcml`` is implemented here. Instances of this
+ class will be capable of being persisted in :term:`ZODB` because
+ the class inherits from the
+ :class:`persistent.mapping.PersistentMapping` class. The
+ ``__parent__`` and ``__name__`` are important parts of the
+ :term:`traversal` protocol. By default, have these as ``None``
+ indicating that this is the :term:`root` object.
+
+#. *Lines 6-12*. ``appmaker`` is used to return the *application
+ root* object. It is called on *every request* to the
+ :mod:`pyramid` application. It also performs bootstrapping by
+ *creating* an application root (inside the ZODB root object) if one
+ does not already exist.
+
+ We do so by first seeing if the database has the persistent
+ application root. If not, we make an instance, store it, and
+ commit the transaction. We then return the application root
+ object.
+
+App Startup with ``run.py``
+---------------------------
+
+When you run the application using the ``paster`` command using the
+``tutorial.ini`` generated config file, the application configuration
+points at an Setuptools *entry point* described as
+``egg:tutorial#app``. In our application, because the application's
+``setup.py`` file says so, this entry point happens to be the ``app``
+function within the file named ``run.py``:
+
+ .. literalinclude:: src/basiclayout/tutorial/run.py
+ :linenos:
+ :language: py
+
+#. *Lines 1-2*. Perform some dependency imports.
+
+#. *Line 12*. Get the ZODB configuration from the ``tutorial.ini``
+ file's ``[app:main]`` section represented by the ``settings``
+ dictionary passed to our ``app`` function. This will be a URI
+ (something like ``file:///path/to/Data.fs``).
+
+#. *Line 15*. We create a "finder" object using the
+ ``PersistentApplicationFinder`` helper class, passing it the ZODB
+ URI and the "appmaker" we've imported from ``models.py``.
+
+#. *Lines 16 - 17*. We create a :term:`root factory` which uses the
+ finder to return a ZODB root object.
+
+#. *Line 18*. We construct a :term:`Configurator` with a :term:`root
+ factory` and the settings keywords parsed by PasteDeploy. The root
+ factory is named ``get_root``.
+
+#. *Lines 19-21*. Begin configuration using the ``begin`` method of
+ the :meth:`pyramid.configuration.Configurator` class, load the
+ ``configure.zcml`` file from our package using the
+ :meth:`pyramid.configuration.Configurator.load_zcml` method, and
+ end configuration using the
+ :meth:`pyramid.configuration.Configurator.end` method.
+
+#. *Line 22*. Use the
+ :meth:`pyramid.configuration.Configurator.make_wsgi_app` method
+ to return a :term:`WSGI` application.
+