目前,我将所有的烧瓶路由都放在一个文件中:
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() 如何在单独的文件中最好地重构路由?(没有循环导入)
发布于 2016-03-08 23:49:15
您可以使用blueprints或导入包含路由的模块。
/app
__init__.py
/views
|- x.py
|- y.py
|- z.py然后,您需要做的唯一一件事就是在初始化flask应用程序之后导入模块(例如在__init__.py中)。
app = Flask(__name__)
...
import views.x
import views.y
import views.z所有路由现在都已在您的应用程序中注册。但是,您不应该从导入的模块中调用函数,因为这会创建循环依赖关系。
发布于 2016-03-09 15:30:29
按照建议使用蓝图被证明是最好的方法。
首先,我将视图重构为一个单独的文件,并在其中定义了一个蓝图。
#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)这个很好用。
https://stackoverflow.com/questions/35862940
复制相似问题