2017-09-16 61 views
0

仅当Flask蓝图实际生成页面时,是否有方法可以为Flask端点(URL页面地址的结尾)生成唯一的UUID?在页面加载时或在Jinja方法调用中为Flask端点生成UUID

以下瓶蓝图代码不会为我工作:

@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作为默认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

“Werkzeug抛出路由错误。”什么是错误? –

回答

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。

+0

谢谢@Nathan,是的,它几乎是我想要的谢谢,但我不知道如何获得在页面加载时生成的uuid,并且在首次生成此页面时也显示在URL中。此外,将张贴变量从一个窗体到这个页面,这是否意味着它会是POST请求,当页面第一次生成时,我认为?然后GET可能如果和当再次检索。 Werkzeug错误是你忘了包括uuid,现在对不起另一个地方,但我认为这个消息非常多。 –

+0

“我不知道如何在页面加载时生成uuid,并在网页首次生成时显示在URL中。”正如我在我的回答中所解释的,您需要将用户重定向到新的URL(在URL中具有UUID的URL)。 “ –

+0

”将从表单发布变量到这个页面,所以这意味着当页面第一次生成时它将成为POST请求,我想“好的,那么第一个路由将是一个POST路由,它将重定向到第二个路由,这将是一个GET路由并包含URL中的UUID。 –

相关问题