# 1.7 Design Principles

The Web Modules are built on a number of popular design patterns. They address the following problems typically encountered in the development of complex sites:

Use Anywhere
  The Web Modules are designed to work with any Python system. They can be used with Zope and Webware but also can be used on a shared hosting account without needing administrator priveldges. This makes the modules especially useful as they can be used to write CGI scripts on Apache servers or WSGI applications using their own server.

Separating design from logic
  The Web Modules include a number of templating systems including Cheetah, XYAPTU and others, which allow for a clean divide between the HTML page design and the program data.

Extreme Programming
  The Web Modules are built on the methadology of Extreme Programming. By writing simple clean modules we avoid unncecesary features and offer a very flexible toolkit for the development of advanced applications.

Form and Field Mangement
  The Web Modules provide a `form` module to allow the simple display of data through an HTML form. Complex fields can be created with typed return values.

Managing users and their access permissions
  The Web Modules include an `auth` module which can use md5 encryption to store users' usernames and passwords in a database. It also offers a very simple interface for user management and permision checking as well as a persistance mechanism.

Database independence
  The web modules come with a database abstraction layer supporting ODBC, MySQL and SQLite. The database layer can be used to program database independant SQL

Object Relation Mapper
  The Modules come with an advanced ORM called `object` which makes database programming simple with no knowledge of SQL. It supports a query builder, one-to-many and many-to-many mappings and integrates with the `form` module to provide an HTML interface to the data structures.