Boilerplate project template for running a Flask-based application on Google App Engine (Python)
- Support for the Python 2.7 runtime was added to this project in May 2012.
- The profiler (gae_mini_profiler) and debugger (werkzeug_debugger_appengine) have been disabled until the libraries are updated to support the Python 2.7 runtime.
Flask is a BSD-licensed microframework for Python based on Werkzeug, Jinja2 and good intentions.
See http://flask.pocoo.org for more info.
- Download this repository via
git clone [email protected]:kamalgill/flask-appengine-template.git
or download the tarball at http://github.com/kamalgill/flask-appengine-template/tarball/master - Copy the src/ folder to your application's root folder
- Set the application id in
src/app.yaml
- Configure datastore models at
src/application/models.py
- Configure application views at
src/application/views.py
- Configure URL routes at
src/application/urls.py
- Configure forms at
src/application/forms.py
- Add the secret keys for CSRF protection by running the
generate_keys.py
script atsrc/application/generate_keys.py
, which will generate the secret keys module at src/application/secret_keys.py
Note: Copy the .gitignore file from the tarball folder's root to your git repository root to keep the secret_keys module out of version control.
Or, add the following to your .(git|hg|bzr)ignore file
# Keep secret keys out of version control secret_keys.py
- Customize the main HTML template at
src/application/static/templates/base.html
- Customize CSS styles at
src/application/static/css/main.css
- Add custom JavaScript code at
src/application/static/js/main.js
- Customize favicon at
src/application/static/img/favicon.ico
- Customize 404 page at
src/application/templates/404.html
To preview the application using App Engine's development server, use dev_appserver.py
dev_appserver.py src/
Assuming the latest App Engine SDK is installed, the test environment is available at http://localhost:8080
To run unit tests, use
python testrunner.py APPENGINE_SDK_PATH
To deploy the application to App Engine, use appcfg.py update
appcfg.py update src/
The application should be visible at http://{YOURAPPID}.appspot.com
The App Engine app's root folder is located at src/
.
src/ |-- app.yaml (App Engine config file) |-- application (application code) |-- blinker/ (library for event/signal support) |-- flask/ (Flask core) |-- flaskext/ (Flask extensions go here; wtforms and gae_mini_profiler are provided) |-- index.yaml (App Engine query index definitions) |-- tests/ (unit tests) |-- werkzeug/ (WSGI utilities for Python-based web development) `-- wtforms/ (Jinja2-compatible web form utility)
The application code is located at src/application
.
application/ |-- __init__.py (initializes Flask app) |-- decorators.py (decorators for URL handlers) |-- forms.py (web form models and validators) |-- models.py (App Engine datastore models) |-- settings.py (settings for Flask app) |-- static | |-- css | | `-- main.css (custom styles) | |-- img | | |-- favicon.ico | | `-- favicon.png | `-- js | |-- main.js (site-wide JS) | `-- lib/ (third-party JS libraries) | |--bootstrap-*.js (Bootstrap jQuery plugins | `--modernizer-*.js (HTML5 detection library) |-- templates | |-- 404.html (not found page) | |-- 500.html (server error page) | |-- base.html (master template) | |-- list_examples.html (example list-based template) | `-- new_example.html (example form-based template) |-- urls.py (URL dispatch routes) `-- views.py (Handlers for URL routes defined at urls.py)
A few of the files in the source tree were uploaded (with apologies) to GitHub with extended attributes (notice the '@' symbol when running ls -al).
To remove the extended attributes, use xattr -rd
at the root of the
src/ folder.
xattr -rd com.apple.quarantine . xattr -rd com.macromates.caret .
Note: Windows users may safely ignore the xattr fix
See licenses/ folder
- Blinker: 1.1
- Bootstrap: 2.0.3
- Flask: 0.8
- Flask-WTF: 0.6
- Jinja2: 2.6 (included in GAE)
- Modernizr: 2.5.3
- Werkzeug: 0.8.3
- WTForms: 1.0.1
Project template layout was heavily inspired by Francisco Souza's gaeseries Flask project
Layout, form, table, and button styles provided by Bootstrap
HTML5 detection provided by Modernizr 2 (configured with all features)