How to run a flask application?

PythonFlask

Python Problem Overview


I want to know the correct way to start a flask application. The docs show two different commands:

$ flask -a sample run

and

$ python3.4 sample.py 

produce the same result and run the application correctly.

What is the difference between the two and which should be used to run a Flask application?

Python Solutions


Solution 1 - Python

The flask command is a CLI for interacting with Flask apps. The docs describe how to use CLI commands and add custom commands. The flask run command is the preferred way to start the development server.

Never use this command to deploy publicly, use a production WSGI server such as Gunicorn, uWSGI, Waitress, or mod_wsgi.

Set the FLASK_APP environment variable to point the command at your app. It can point to an import name or file name. It will automatically detect an app instance or an app factory called create_app. Set FLASK_ENV=development to run with the debugger and reloader.

$ export FLASK_APP=sample
$ export FLASK_ENV=development
$ flask run

On Windows CMD, use set instead of export.

> set FLASK_APP=sample

For PowerShell, use $env:.

> $env:FLASK_APP = "sample"

The python sample.py command runs a Python file and sets __name__ == "__main__". If the main block calls app.run(), it will run the development server. If you use an app factory, you could also instantiate an app instance at this point.

if __name__ == "__main__":
    app = create_app()
    app.run(debug=True)

Both these commands ultimately start the Werkzeug development server, which as the name implies starts a simple HTTP server that should only be used during development. You should prefer using the flask run command over the app.run() method.

Solution 2 - Python

Latest documentation has the following example assuming you want to run hello.py(using .py file extension is optional):

Unix, Linux, macOS, etc.:

$ export FLASK_APP=hello
$ flask run

Windows:

> set FLASK_APP=hello
> flask run

Solution 3 - Python

you just need to run this command

python app.py

(app.py is your desire flask file)

but make sure your .py file has the following flask settings(related to port and host)

from flask import Flask, request
from flask_restful import Resource, Api
import sys
import os

app = Flask(__name__)
api = Api(app)
port = 5100

if sys.argv.__len__() > 1:
    port = sys.argv[1]
print("Api running on port : {} ".format(port))

class topic_tags(Resource):
    def get(self):
        return {'hello': 'world world'}

api.add_resource(topic_tags, '/')


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=port)

Solution 4 - Python

For Linux/Unix/MacOS :-

export FLASK_APP = sample.py
flask run

For Windows :-

python sample.py
      OR
set FLASK_APP = sample.py
flask run

Solution 5 - Python

it will work in cmd only if you type

> pipenv shell 

start subshell in virtual environment first then type

> set FLASK_APP=hello
> flask run

Solution 6 - Python

The very simples automatic way without exporting anything is using python app.py see the example here

from flask import (
    Flask, 
    jsonify
)

# Function that create the app 
def create_app(test_config=None ):
    # create and configure the app
    app = Flask(__name__)

    # Simple route
    @app.route('/')
    def hello_world(): 
        return jsonify({
           "status": "success",
            "message": "Hello World!"
        }) 
     
    return app # do not forget to return the app

APP = create_app()

if __name__ == '__main__':
    # APP.run(host='0.0.0.0', port=5000, debug=True)
    APP.run(debug=True)

Solution 7 - Python

Please use the simplified form:

$ FLASK_APP=sample flask run

Solution 8 - Python

Run as API service

from flask import Flask
class A:
    def one(port):
        app = Flask(__name__)
        app.run(port=port)
        print("something")

    one(port=2222)

output:

* Running on http://127.0.0.1:2222/ (Press CTRL+C to quit)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKarateKidView Question on Stackoverflow
Solution 1 - PythondavidismView Answer on Stackoverflow
Solution 2 - PythonCanerView Answer on Stackoverflow
Solution 3 - PythonHassan SaeedView Answer on Stackoverflow
Solution 4 - PythonArgha PalView Answer on Stackoverflow
Solution 5 - PythontheAccountant.pyView Answer on Stackoverflow
Solution 6 - PythonDINA TAKLITView Answer on Stackoverflow
Solution 7 - Pythonfred.yuView Answer on Stackoverflow
Solution 8 - PythonAkhileshView Answer on Stackoverflow