Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Python web development simplified
Python Shell
branch: master
Failed to load latest commit information.
bin improved setup process
docs simplified settings
giotto improved setup process
.gitignore
.travis.yml typo
CHANGELOG removing sqlalchemy, adding django orm
LICENSE added license file
MANIFEST.in fixing generic template (stupid python packaging)
README.rst renamed GiottoProgram -> Program, included all docs
setup.py improved setup process

README.rst

https://pypip.in/v/giotto/badge.png https://travis-ci.org/priestc/giotto.png?branch=master

What is Giotto?

Giotto is a python web framework. It encourages a functional style where model, view and controller code is strongly decoupled.

Key Features of Giotto include:

  • Extremely terse code. A full featured blog application is under 300 lines of code (including templates)
  • Support for Python 3.3, 3.2, 2.7 and 2.6
  • Generic views, generic models and multiple pluggable controllers.
  • Free RESTful interface along with your normal "browser POST" CRUD site.
  • Functional CRUD patterns that do away with the need for django-style form objects.
  • Automatic URL routing.
  • Built in cache (supports Redis and Memcache, and an API for supporting any other engines)
  • SQLAlchemy for database persistence.
  • Jinja2 for HTML templates (with an API for extending for other template engines)

Getting started

Install and create base project files:

pip install giotto
mkdir demo
cd demo
giotto create http

Now your project is initialized. Open the manifest.py and add the following:

from giotto.programs import Manifest, Program
from giotto.views import jinja_template, BasicView

def multiply(x, y):
    x = int(x or 0)
    y = int(y or 0)
    return {'x': x, 'y': y, 'result': x * y}

manifest = Manifest({
    'multiply': Program(
        model=[multiply],
        view=BasicView(
            html=jinja_template('multiply.html'),
        ),
    ),
})

Now create a file called multiply.html:

<!DOCTYPE html>
<html>
    <body>
        {{ data.x }} * {{ data.y }} == <strong>{{ data.result }}</strong>
    </body>
</html>

Or if you're too lazy to make a template, set the view keyword argument to just BasicView() to use the generic view.

Run the development server:

$ giotto http --run

Point your browser to http://localhost:5000/multiply?x=3&y=3. Additionaly, try http://localhost:5000/multiply.json?x=3&y=3. You can also invoke your multiply program through the command line:

$ giotto create cmd
$ giotto cmd multiply --x=4 --y=2

Also:

$ giotto cmd multiply.html --x=4 --y=2

You can also use positional arguments:

$ giotto cmd multiply/4/6

Through the web as well:

$ curl http://localhost:5000/multiply/234/12

Giotto has a feature called "Model Mocking" which allows you to bypass the model. This is useful if your model is coupled to a database, which you don't want to run (for instance when you're a designer designing templates).

Add a mock object to the program:

manifest = Manifest({
    'multiply': Program(
        model=[multiply, {'x': 4, 'y': 5, 'result': 20}],
        view=BasicView(
            html=jinja_template('multiply.html'),
        ),
    ),
})

When you run the server, add the --model-mock option:

$ giotto http --run --model-mock

Now, all requests will bypass the multiply function, and will return the mock instead:

$ curl http://localhost:5000/multiply.json/12312/21323
{"x": 4, "y": 5, "result": 20}
$ curl http://localhost:5000/multiply.json/3/13
{"x": 4, "y": 5, "result": 20}

Links:

  • To discuss Giotto, please visit the Google Group
  • Read Giotto's documentation.
  • Check out giottoblog, a full featured blog application written with the Giotto framework.
  • Also, dylanshows, another site written with Giotto.
Something went wrong with that request. Please try again.