Split Python Flask app into multiple files

后端 未结 4 1249
执念已碎
执念已碎 2020-11-27 10:28

I\'m having trouble understanding how to split a flask app into multiple files.

I\'m creating a web service and I want to split the api\'s into different files (Acco

相关标签:
4条回答
  • 2020-11-27 10:35

    Yes, Blueprints are the right way to do it. What you are trying to do can be achieved like this:

    Main.py

    from flask import Flask
    from AccountAPI import account_api
    
    app = Flask(__name__)
    
    app.register_blueprint(account_api)
    
    @app.route("/")
    def hello():
        return "Hello World!"
    
    if __name__ == "__main__":
        app.run()
    

    AccountAPI.py

    from flask import Blueprint
    
    account_api = Blueprint('account_api', __name__)
    
    @account_api.route("/account")
    def accountList():
        return "list of accounts"
    

    If this is an option, you might consider using different URL prefixes for the different APIs/Blueprints in order to cleanly separate them. This can be done with a slight modification to the above register_blueprint call:

    app.register_blueprint(account_api, url_prefix='/accounts')
    

    For further documentation, you may also have a look at the official docs.

    0 讨论(0)
  • 2020-11-27 10:43

    Using Blueprint you can add your routes in the routes directory.

    Structure

    app.py
    routes
        __init__.py
        index.py
        users.py
    

    __init__.py

    from flask import Blueprint
    routes = Blueprint('routes', __name__)
    
    from .index import *
    from .users import *
    

    index.py

    from flask import render_template
    from . import routes
    
    @routes.route('/')
    def index():
        return render_template('index.html')
    

    users.py

    from flask import render_template
    from . import routes
    
    @routes.route('/users')
    def users():
        return render_template('users.html')
    

    app.py

    from routes import *
    app.register_blueprint(routes)
    

    If you want to add a new route file, say accounts.py, you just need to create the file accounts.py in the routes directory, just like index.py and users.py, then import it in the routes.__init__.py file

    from .accounts import *
    
    0 讨论(0)
  • 2020-11-27 10:51

    If you are using blueprints and want to route / redirect to a url of your blueprint inside a template you are using you need to use the correct url_for statement.

    In your case if you would like to open the url account of your blueprint you have to state it like this in your template:

    href="{{ url_for('account_api.account') }}"
    

    and for the main app it would look like this:

    redirect(url_for('account_api.account'))
    

    Otherwise the werkzeug library will throw an error.

    0 讨论(0)
  • 2020-11-27 11:01

    One another way to do this can be with lazy loading, where you would explicitly attach view functions on need basis.

    0 讨论(0)
提交回复
热议问题