已解决:带有模板的烧瓶动态路由

时间:2020-03-12 13:17:33

标签: python flask

我正在尝试使用模板(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')))

0 个答案:

没有答案