Creating a Flask web app in Domino

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.)

Creating the App Structure

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

Create the folders

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.

Create the files

Create an __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

Customization

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')

Testing

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.

Was this article helpful?
0 out of 0 found this helpful