只有当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">
答案 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。