mirror of
https://github.com/wassname/pyramid_formalchemy.git
synced 2026-06-27 16:10:40 +08:00
206 lines
6.5 KiB
Plaintext
206 lines
6.5 KiB
Plaintext
.. pyramid_formalchemy documentation master file, created by
|
|
sphinx-quickstart on Sat Jan 15 20:18:53 2011.
|
|
You can adapt this file completely to your liking, but it should at least
|
|
contain the root `toctree` directive.
|
|
|
|
===============================================
|
|
Welcome to pyramid_formalchemy's documentation!
|
|
===============================================
|
|
|
|
About
|
|
=====
|
|
|
|
``pyramid_formalchemy`` provides a CRUD interface for ``pyramid`` based on ``FormAlchemy``
|
|
|
|
It also allows to use ``FormAlchemy`` to render forms in your application.
|
|
|
|
Installation
|
|
============
|
|
|
|
pyramid_formalchemy must be a dependency of you application, so you
|
|
must add "pyramid_formalchemy" as a dependency in your setup.py under
|
|
install_requires. You must now update your environment, in case of
|
|
buildout, by running a new buildout. If you want nicer jquery
|
|
functionality also add a dependency for ``fa.jquery``.
|
|
|
|
pyramid_formalchemy also provides a pyramid scaffold. It can be used to
|
|
add a skeleton to an existing project or to create a new project. If you
|
|
create a new project, you must first install pyramid_formalchemy in
|
|
your python environment, either with pip::
|
|
|
|
$ pip install pyramid_formalchemy pyramid_fanstatic fa.jquery
|
|
|
|
or with easy_install::
|
|
|
|
$ easy_install pyramid_formalchemy pyramid_fanstatic fa.jquery
|
|
|
|
Only after that, the pyramid scaffold becomes available.
|
|
The template was made with the idea that it can be used to extend
|
|
existing applications. It does not create an app for you. For
|
|
bootstrapping your app, you need another pyramid scaffold. The provided
|
|
template works well with ``alchemy``, ``Akhet``. To bootstrap an application,
|
|
call paster like that::
|
|
|
|
$ pcreate -s alchemy -s pyramid_fa myapp
|
|
|
|
Or for ``Akhet``::
|
|
|
|
$ pcreate -s akhet -s pyramid_fa myapp
|
|
|
|
The application is created by akhet, akhet does not know about
|
|
pyramid_formalchemy, and pyramid_formalchemy cannot modify the app
|
|
configuration. So you have to do this by hand. First, you must add the
|
|
install dependency like explained earlier. Second, you must add the
|
|
following line in the main method
|
|
that returns the wsgi app, directly after Configurator has been
|
|
created (The example assumes that the Configurator instance is stored
|
|
under the name "config")::
|
|
|
|
...
|
|
config.include('myapp.fainit')
|
|
...
|
|
|
|
More details are explained in ``myapp/README_FORMALCHEMY.txt``.
|
|
The process is the same for other templates. For the pyramid ones
|
|
there are additional changes necessary that are also explained in fareadme.txt
|
|
|
|
To add the minimum configuration to an existing application, you
|
|
should be able to run::
|
|
|
|
$ pcreate -s pyramid_fa myapp
|
|
|
|
All files that paster creates are prefixed with fa, and should not
|
|
interfere with existing code. The other customizations described for
|
|
fresh applications are also valid for existing apps.
|
|
|
|
Basic usage
|
|
============
|
|
|
|
Add an empty ``forms.py`` module at the root of your project.
|
|
|
|
Now you just need to include two lines of configuration in the ``__init__.main()`` function of your project.
|
|
Here is the one used for testing:
|
|
|
|
.. literalinclude:: ../pyramidapp/pyramidapp/__init__.py
|
|
|
|
This will render the **basic** formalchemy interface.
|
|
|
|
It's better to enable the jquery features like this:
|
|
|
|
.. literalinclude:: ../pyramidapp/pyramidapp/jquery.py
|
|
:pyobject: main
|
|
|
|
|
|
That's it. Now launch your app, browse ``/admin/`` and enjoy it !
|
|
|
|
|
|
About Models
|
|
=============
|
|
|
|
Here is a typical model to use full features of pyramid_formalchemy. Notice
|
|
that the fields are defined using :py:func:`formalchemy.Column`:
|
|
|
|
.. literalinclude:: ../../formalchemy_project/models.py
|
|
:pyobject: User
|
|
|
|
See also :mod:`pyramid_formalchemy.actions` to customize form buttons per model.
|
|
|
|
Advanced usage
|
|
===============
|
|
|
|
Custom view, factory, forms
|
|
----------------------------
|
|
|
|
In the toward examples we just pass a ``package`` parameter to
|
|
:func:`~pyramid_formalchemy.configure`. By default the function will try to
|
|
load ``package.models``, ``package.models.DBSession`` and ``package.forms`` but
|
|
you can override this. In this case you don't need to specify a package::
|
|
|
|
|
|
config.formalchemy_admin(config,
|
|
forms='formalchemy_project.forms',
|
|
models='formalchemy_project.mymodels',
|
|
session_factory='formalchemy_project.session.Session',
|
|
)
|
|
|
|
You can also change the path ``prefix`` used. pyramid_formalchemy will use
|
|
``/admin/`` by default. See :func:`~pyramid_formalchemy.configure`.
|
|
|
|
Having fun with the query_factory parameter
|
|
-------------------------------------------
|
|
|
|
.. literalinclude:: ../../formalchemy_project/__init__.py
|
|
:pyobject: main
|
|
|
|
Custom views per model
|
|
----------------------
|
|
|
|
You can also register custom CRUD views per ModelListing::
|
|
|
|
|
|
config.formalchemy_model_view('admin',
|
|
model='pyramidapp.models.Foo',
|
|
context='pyramid_formalchemy.resources.ModelListing',
|
|
renderer='templates/foolisting.pt',
|
|
attr='listing',
|
|
request_method='GET',
|
|
permission='view')
|
|
|
|
and per Model::
|
|
|
|
|
|
config.formalchemy_model_view('admin',
|
|
model='pyramidapp.models.Foo',
|
|
context='pyramid_formalchemy.resources.Model',
|
|
name='',
|
|
renderer='templates/fooshow.pt',
|
|
attr='show',
|
|
request_method='GET',
|
|
permission='view')
|
|
|
|
Events
|
|
=======
|
|
|
|
pyramid_formalchemy got some hooks to help you to customize things. See :mod:`pyramid_formalchemy.events`.
|
|
|
|
Actions
|
|
=======
|
|
|
|
pyramid_formalchemy allow you to customize links and actions of your views. See :mod:`pyramid_formalchemy.actions`.
|
|
|
|
Setting permissions
|
|
===================
|
|
|
|
pyramid_formalchemy takes care of some ``__acl__`` attributes.
|
|
|
|
Setting permissions for the global interface
|
|
---------------------------------------------
|
|
|
|
You just need to subclass the default factory in your application:
|
|
|
|
.. literalinclude:: ../pyramidapp/pyramidapp/security.py
|
|
|
|
Setting permissions per model
|
|
-----------------------------
|
|
|
|
You can also add an ``__acl__`` attribute to your model class:
|
|
|
|
.. literalinclude:: ../pyramidapp/pyramidapp/models.py
|
|
:pyobject: Bar
|
|
|
|
Api
|
|
===
|
|
|
|
.. toctree::
|
|
:maxdepth: 2
|
|
|
|
modules/index.txt
|
|
|
|
Indices and tables
|
|
==================
|
|
|
|
* :ref:`genindex`
|
|
* :ref:`modindex`
|
|
* :ref:`search`
|
|
|