如何构建烧瓶项目并将路由重构为单独的文件



目前我将所有烧瓶路线都放在一个文件中:

from flask import Flask, render_template
from flask import jsonify, make_response

app = Flask(__name__)
app.debug = True
@app.route('/skills')
def skillchart():
    return render_template('skills.html')

@app.route('/api/skills')
def getSkills():
    skills = {
        "HTML": [], #jsonify does not support arrays, but only dictionaries.
        "CSS": [],  # also I might add skills with subskills
        "SASS": [],
        "Bootstrap": []
    }
    return jsonify(skills)
if __name__ == '__main__':
    app.run() 

如何最好地重构单独文件中的路由?(无循环进口)

您可以使用蓝图或导入包含路由的模块。

/app
    __init__.py     
    /views
      |- x.py
      |- y.py
      |- z.py

然后,您唯一需要做的就是在烧瓶应用程序初始化后导入模块(例如在 __init__.py 中)。

app = Flask(__name__)
...
import views.x
import views.y
import views.z

所有路由现在都在您的应用程序中注册。但是,不应从导入的模块调用函数,因为它会创建循环依赖项。

按照建议使用蓝图被证明是最好的方法。

首先,我将视图重构为一个单独的文件,并在其中定义了一个蓝图。

#views/skills.py
from flask import Blueprint
from flask import jsonify, make_response
api_blueprint = Blueprint('api', __name__)

@api_blueprint.route('/api/skills/frontend')
def getSkills():
    skills = {
        "HTML/CSS": [
            "SASS",
            "Bootstrap"
        ]
    }
    return jsonify(skills)


@api_blueprint.route('/api/skills/backend')
def getBackendSkills():
    skills = {
        "Java": [],
        "Python": [
            "Django",
            "Flask"
        ],
        "Ruby": [
            "Ruby on Rails"
        ],
        "PHP": [
            "Laravel"
        ],
        "SQL": []
    }
    return jsonify(skills)
@api_blueprint.route('/api/skills/mixed')
def getMixedSkills():
    skills = {
        "Javascript": {
            'Frontend': [
                "angular.js",
                "knockout.js",
                "coffeescript",
                "jquery"
            ],
            'Backend': [
                "Node.js",
                "Express.js"
            ]
        }
    }
    return jsonify(skills)

然后我在主文件中导入并注册蓝图(app.py)

from flask import Flask, render_template
from views.skills import api_blueprint
app = Flask(__name__)
app.debug = True


app.register_blueprint(api_blueprint)
@app.route('/skills')
def skillchart():
    return render_template('skills.html')

if __name__ == '__main__':
    app.run(threaded=True)

这工作得很好。

最新更新