在页面加载/或Jinja方法调用中为Flask端点生成UUID

时间:2017-09-16 00:08:44

标签: flask jinja2

只有当Flask蓝图实际生成页面时,是否有办法为Flask端点(URL页面地址的末尾)生成唯一的UUID?

以下Flask蓝图代码对我有用:

@street_report_blueprint.route('/', methods=['POST', 'GET'])
def get_streetreport(reportid=uuid.uuid4().hex):
    mainselection = request.form['MainlistRadios']
    return render_template('street_reports/street_report.jinja2', mainselection=mainselection, reportid=reportid)

reportid在Flask方法的参数中生成为默认UUID值,并成功传递到网页。 ({{ reportid }}在那里显示。)

但如果我改变路线:

@street_report_blueprint.route('/<string:reportid>', methods=['POST', 'GET'])

...然后它不起作用:Werkzeug沿着Did you forget to include the UUID?的行抛出路由错误。我在看 Werkzeug's URL Routing docs并检查了SO和Google,所以我希望至少没有人会投票。

或者是否有简单的方法来生成UUID并将其传递给调用Blueprint方法的Jinja语句?目前我有:

<form class="form-horizontal" action = "{{ url_for('street_reports.get_streetreport') }}" method="post">

1 个答案:

答案 0 :(得分:0)

我不确定我理解你所问的是什么,但我会小心翼翼地回答它。

除非我弄错了,否则您在上面发布的两个示例代码段之间的一个很大区别是,在第一个代码段中,用户在访问该URL时不需要指定UUID,而在第二个代码段中, URL 末尾的字符串类型是必需的。

听起来你想要的是用户能够导航到特定的URL,比如说www.website.com/thing/,如果他们只有这样的URL,他们应该为他们生成一个唯一的UUID,并且UUID应该位于他们最终到达的URL的末尾,所以类似于www.website.com/thing/d0248364-b3ec-481e-a725-2846c6e72576,如果用户在URL的末尾提供该UUID(例如www.website.com/thing/d0248364-b3ec-481e-a725-2846c6e72576),他们应该只是被带到那个页面。

在这种情况下我要做的是有两条GET路由:一条用于尚未生成UUID的情况,另一条用于已知UUID的情况。在前一种情况下(需要创建UUID),我会创建UUID,然后将它们重定向到第二条路由,这需要URL末尾的UUID。