Welcome to The Ferris Framework¶
Ferris is a rapid application framework created specifically for Google App Engine. This framework is designed to get you up and running as quickly as possible with flexible, granular scaffolding for common CRUD operations. Ferris is inspired by Ruby on Rails, CakePHP, Django, and Flask.
Ferris is licensed under the Apache License, Version 2.0.
Features¶
- Uses native App Engine libraries for data modeling.
- Familiar model-view-whatever style architecture.
- Automatic routing with the ability to specify completely custom routes.
- Granular and flexible handler and template scaffolding.
- Powerful template and theme engine built on Jinja2.
- Integration with wtforms.
- Global (application-wide) and local (within object) events system.
- Plugin architecture.
- OAuth2 consumer support built-in.
- Pre-packaged Google API Client, GData Client, and PyTZ for App Engine.
A Quick Look¶
A simple blog application could be written like this:
from ferris import Model, Controller, scaffold
class Post(Model):
title = ndb.StringProperty()
content = ndb.TextProperty()
class Posts(Controller):
class Meta:
prefixes = ('admin',)
components = (scaffold.Scaffolding,)
Model = Post
list = scaffold.list
view = scaffold.view
admin_list = scaffold.list
admin_view = scaffold.view
admin_add = scaffold.add
admin_edit = scaffold.edit
admin_delete = scaffold.delete
At this point, a full administrative interface for creating Posts would be available at /admin/posts and a publicly accessable list and view would be present at /posts.
Documentation¶
- Getting Started
- Tutorial: Multi-User Blog
- User’s Guide
- Folder Structure
- How Ferris does MVC
- Models
- Controllers
- Authorization Chains
- Request Parsers
- Response Handlers
- Routing
- Static Files
- Views
- Templates
- Scaffolding
- Components
- Behaviors
- Forms
- Messages
- Events
- Plugins
- OAuth2
- Google API Helper
- Settings
- Caching
- Search
- Uploads & Downloads
- Testing
- Packages
- Changelog
- Contributing & License
Indexes¶
If you can’t find the information you’re looking for, have a look at the index or try to find it using the search function: