The following guide will set up your Domino project more as a proper web site powered by Flask. This isn’t difficult; you just need to make sure all the folders and files are in place to ensure the app runs correctly.
(Note: This article will create an app using the MVC method.)
First, you’ll need to create the app structure. The following is what we’ll end up with and will discuss each area in turn.
Note: /mnt is your Files directory on Domino. Also, the following names matter: app.sh, __init__.py, /static, /templates. Besides those, everything can be customized to your liking in this article.
/mnt |-- ... |-- app.sh |-- run.py |-- /flask_app |-- __init__.py |-- /static |-- /templates
In the Files section of Domino make a new folder called flask_app. This will be a Python package that will contain the web app.
In the flask_app folder put two other folders, one called “static” the other “templates”. In the “static” folder you put your static files and in the “templates” folder you put your template files. The static and templates folders will be recognized by Flask to know from where to fetch the appropriate files. It’s possible to change which folder is noticed as the “static” folder, but common practice is to just leave it as static.
__init__.py file in the flask_app folder. This file will make flask_app a Python package. In that file put the following:
from flask import Flask class ReverseProxied(object): def __init__(self, app): self.app = app def __call__(self, environ, start_response): script_name = environ.get('HTTP_X_SCRIPT_NAME', '') if script_name: environ['SCRIPT_NAME'] = script_name path_info = environ['PATH_INFO'] if path_info.startswith(script_name): environ['PATH_INFO'] = path_info[len(script_name):] return self.app(environ, start_response) app = Flask(__name__) app.wsgi_app = ReverseProxied(app.wsgi_app)
Back in your Files section of Domino create a new file called run.py
In run.py add the following:
from flask_app import app from flask_app import views if __name__ == '__main__': app.run()
Change your app.sh file in the Files section of Domino to:
!/usr/bin/env bash export FLASK_APP=run.py export FLASK_DEBUG=1 python -m flask run --host=0.0.0.0 --port=8888
Now we’re going to add a views.py file. This file is where you place all your app logic.
We’ll make a very simple app that just returns “Hello World!”
Add the following to views.py:
from flask_app import app @app.route('/') def index(): return "Hello World!"
If you have a template in the templates folder, you would add:
from flask import render_template from flask_app import app @app.route('/') def index(): return render_template('hello.html')
Now once you publish the app, when you go to your app url, you should see “Hello World!”
To see an example with a larger template file utilizing flask_bootstrap, you can fork this project.