David J.
David J.

Reputation: 1913

how to include views from another module in flask app?

I'm new to Flask and I am trying to find out the easiest way to extend the views of the following app:

import os

from flask import Flask


def create_app(test_config=None):
    # create and configure the app
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_mapping(
        SECRET_KEY='dev',
        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
    )

    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        # load the test config if passed in
        app.config.from_mapping(test_config)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    # a simple page that says hello
    @app.route('/hello')
    def hello():
        return 'Hello, World!'

    return app

I read some of the docs on blueprints and this seemed somewhat complex. My question is:

what's the easiest way to add a view to this create app function from another file?

If it's by using blueprints, then so be it, but is something like this possible?

###views.py

@app.route('/goodbye')
def goodbye():
    return 'Goodbye, World!'

init.py

from views import goodbye

...

Upvotes: 0

Views: 583

Answers (1)

AKX
AKX

Reputation: 168967

If you don't want to use blueprints, then just remember decorators are just function calls.

@app.route('/hello')
def hello():
    return 'Hello, World!'

is the exact same as

def hello():
    return 'Hello, World!'
hello = app.route('/hello')(hello)

Now armed with this knowledge, you can do

from views import goodbye
# ...
app.route('/goodbye')(goodbye)

To avoid that weird double-call syntax, call the underlying add_url_rule function:

app.add_url_rule('/', 'goodbye', goodbye)

But, you know, preferably follow the article on "larger applications": https://flask.palletsprojects.com/en/1.1.x/patterns/packages/

Upvotes: 2

Related Questions