目前我将所有烧瓶路线都放在一个文件中:
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)
这工作得很好。