Bivouac

a light-weight, wsgi-compliant web framework in Python


Keywords
web, mvc, wsgi, framework
License
MIT
Install
pip install Bivouac==0.1.1

Documentation

bivouac - a light-weight, wsgi-compliant MVC web framework in Python

Why bivouac?

bivouac has grown out of my own efforts to build websites in Python with as thin a footprint as I can. bivouac provides a basic MVC framework inspired by Microsoft's MVC 1.0 framework. Expect further ruminations on the topic elsewhere. In the past I suggested I would not support this project, but as I find I rely on bivouac for more of my own websites, I expect to do as much as I can to encourage adoption and support. I think we're on to something good here!

What is bivouac?

bivouac is WSGI compliant and aims to be as webserver-agnostic as it can. Using mod_wsgi or isapi_wsgi, bivouac works well with both Apache and IIS, with NGINX being an untested likelihood. Today bivouac supports authentication and user sessions using MongoDB. Long-term look for this to become more database independent.

Currently, bivouac has a small number of dependencies:

  • mod_wsgi or isapi_wsgi
  • Paste & Webob
  • mongodb
  • PyMongo

Basic Usage

bivouac provides classes for MVC routing, controllers, models and views. Here's a quick intro to getting a site up and running using bivouac.

For starters, create a module called app.py, or whatever you've specified as your WSGI entry point. Here we see a simple WSGI entry point with some boiler-plate routing. This will serve most folks needs, so feel free to start with this setup.

import bivouac

application = bivouac.Router()
application.add_route('/', defaults={'controller': 'default', 'action': 'index'})
application.add_route('/{controller}/', defaults={'action': 'index'})
application.add_route('/{controller}/{action}')
application.add_route('/{controller}/{action}/{id}')

Next you'll need a controller. bivouac looks for controllers within your site directory, typically in the controllers package. Your controller will inherit from bivouac.Controller. Methods decorated with @action will be treated as controller actions and return bivouac views, or any WSGI compliant, iterable structure.

import bivouac
from bivouac.controller import action, noauth

controller = "DefaultController"

class DefaultController(bivouac.Controller):

    '''Default Controller.
    '''

    def __init__(self):

        bivouac.Controller.__init__(self)


    @noauth
    @action
    def index(self, req, **vars):

        import views.index as View

        view = View.IndexView()
        return view