Getting started with Flask
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.
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 that /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 |-- views.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
Now we’re going to add a views.py file. This file is where you place all your app logic and should be created in the flask_app directory.
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!”
Thank for your article. I used your template to make a test flask web app. But when I added new route (for example version), it not working, only the root route work. How can I fix this issue. Thank.
Here is my views.py.
Please sign in to leave a comment.