Reputation: 1913
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!'
from views import goodbye
...
Upvotes: 0
Views: 583
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