我正在尝试使用模板(yaml文件) (要点是仅可以使用模板动态添加路由的功能)
下面的代码示例只是代码的一小部分
模板示例: tech_name:EXAMPLE_OF_TECH_NAME
category: category_1
tech_id: tech_id
function_name: function_1
return_function: eff_function
binding:
methods:
- GET
- POST
display_name: some_project
url_suffix: some_urlsffix
python应用看起来像这样:
from flask import Flask, render_template, session, request, make_response, abort
from funcs.libs._shared_funcs import cookie_exist, check_prems, build_nav_options
from flask_kerberos import requires_authentication
"""load_maindata - reads all of the templates"""
main_data, categories = load_maindata()
available_url_suffixes = [data['parameters']['binding']['url_suffix'] for data in main_data]
app = Flask(__name__)
""" base dynamic route based on templates """
@app.route("/<url_suffix>", methods=['GET', 'POST'])
@requires_authentication
def _f(user, url_suffix):
if url_suffix not in available_url_suffixes:
return abort(404)
tech = [tech for tech in main_data if tech['parameters']['binding']['url_suffix'] == url_suffix][0]
tech_id = tech['parameters']['tech_id']
return_function = tech['parameters']['return_function']
check_prems(tech_id)
return globals()[return_function](request, maestro_db, UKEY, tech)
现在一切看起来都很好,直到我提交了表单,然后它应该返回到一些动态路线 但比我得到以下错误:
无法为端点“ function_1”构建网址。
看起来像是在初始加载后就忘记了路由。
eff_fucntion返回:
resp = make_response(redirect(url_for('function_1', _external=True, _scheme='https')))
更新:使用以下方法解决
:make_response(redirect('some_urlsuffix', code=301))
代替
make_response(redirect(url_for('function_1', _external=True, _scheme='https')))