A framework for WebProgramming.
- Apache with mod_python
- Python versions
Draco plugs into the Apache/mod_python combination. Both Apache 1.3 and Apache 2.0 are supported. For serious use, a relational database must be installed. Currently, the popular MySQL and PostgreSQL database systems are supported.
No special development environment is available. Draco applications can be made just like a regular Python application using a text editor.
Most of the standard CGI environment is available as properties or methods of a collection of global Python objects.
Session, Identification and Authentication
Draco has an integrated and automatic session management mechanism. Both cookie and url tagging methods are supported. Sessions can be logged in, made persistent and optionally made secure by using SSL. Authentication and authorization have to be performed by the application.
Draco make use of the namespace concept. A namespace is a place where you can store (almost) arbitrary Python variables using the Python dictionary API (ns['varname'] etc.). There are different namespaces, some of which are persistent. These include the session, user, application and server namespace.
Technically, persistence is implemented by a relational database backend.
Process Logic versus Markup Logic
In Draco program logic is conceptually separated into process and markup logic. The process logic is the logic that processes a request and performs the desired action. The markup logic is the logic that formats the results of the process logic in the html.
Handlers and Templates
Draco makes use of handlers and templates. The process logic is put in a handler. This handler processes the client's request and performs the requested operations. The result of these operations is put in a special namespace called the interface.
The template is template as exist in many web frameworks, namely an html file with embedded code blocks. The only thing this code should do is format the results from the interface namespace into the html. All variables from the interface namespace are directly available to this code as global variables.