# TurboGears

O TurboGears é um framework para desenvolvimento web em Python que consiste de vários componentes WSGI, como Pylons, SQLAlchemy, Genshi e Repoze.
É projetado em torno da arquitetura modelo-visão-controlador (MVC), assim como o Struts ou Ruby on Rails, concebido para tornar mais ágil e fácil o desenvolvimento de aplicações web em Python, bem como melhorar sua manutenção.

## Componentes do TurboGears

TurboGears é construído em cima de várias bibliotecas e middlewares diferentes. As ferramentas padrão foram alteradas entre as séries 1.x e 2.x, mas a maioria desses componentes podem ser usados ​​em qualquer uma delas pois há suporte para muitas configurações alternativas. A seguir estão os principais componentes que um desenvolvedor irá interagir.

### Componentes do TurboGears 2.x

* SQLAlchemy (modelo) - define as estruturas de tabelas do banco de dados do usuário e como ligá-los aos objetos Python que o controlador do usuário pode interagir.
* Genshi (visão) - define templates (modelos) para o HTML ou XHTML que o usuário irá gerar. Este é o lugar onde o usuário define o front-end que o cliente irá interagir.
* Pylons (controlador) - este middleware manipula toda a lógica de back-end do usuário e conecta ao servidor web do usuário para oferecer dados para web. Por padrão, o servidor web Paster é usado, mas o usuário pode também conectar-se ao Apache, Nginx ou qualquer outro servidor web compatível com WSGI.
* Repoze - Repoze.who & Repoze.what são usados para manipular a segurança (autenticação & autorização, respectivamente). Quando define-se elementos do controlador do usuário a serem expostos à web, atributos do repoze definem quem pode acessá-los e sob quais condições.
* ToscaWidgets - é a biblioteca primária de widgets para criação de formulários e GUIs complexas. Tosca, por padrão, irá gerar formulários HTML simples, mas também pode ser usada como um middleware para conectar widgets e toolkits JavaScript mais avançados. Diferente do TurboGears 1.x, não há mais uma biblioteca JavaScript preferida/integrada.

### Componentes do TurboGears 1.x

* SQLObject (modelo) - backend de dados que pode criar um banco de dados ou interface com dados existentes em muitos servidores de bancos de dados.
** SQLAlchemy é proposto para se tornar o padrão no TurboGears >= 1.1.
* Kid (visão) - mecanismo de template de frontend XHTML onde todos os templates são arquivos XHTML ou XML válidos que normalmente são feitos de uma forma que permita abrir estes templates como simples arquivos XHTML para verificar o design. Ao mesmo tempo, as funcionalidades são fornecidas para embutir fragmentos de código Python através de XML.
** Genshi é o sucessor de Kid e o substituirá como o mecanismo de template padrão no TurboGears >= 1.1. É quase 100% compatível com a sintaxe do Kid.
* CherryPy (controlador) - middleware que permite que aplicações web sejam programadas através da escrita de manipuladores de eventos que retornam dados para templates (no caso TurboGears). Os mesmos dados podem ser recebidos em modo Ajax como um fluxo de dados JSON.
* MochiKit é a biblioteca JavaScript preferida, porém opcional, para o TurboGears 1.x. É projetada para tornar a programação JavaScript mais pythônica. É muito utilizada para implementar funcionalidades e widgets Ajax, uma vez que fornece uma interface para obter fluxos de dados JSON de maneira assíncrona.

## Plugins de template

Linguagens de template diferentes de Genshi podem ser usadas através do arquivo de configuração de aplicação do usuário. Os pluggins atualmente suportados em 2.1 são Myghty, Jinja2, Mako, Cheetah e Kajiki. Atualmente, o suporte ao Kid não é planejado, uma vez que o Genshi é virtualmente idêntico. Esta lista pode continuar a mudar em versões futuras.