在金字塔中传递形状参数到隐藏形式的更好方法

2024-09-30 16:22:44 发布

您现在位置:Python中文网/ 问答频道 /正文

在前面的question中,我试图找出在金字塔中的表单之间传递数据的正确策略。根据我得到的答案,我决定采用隐藏形式。在

我开始实现这一点,并认为一定有更好的方法来传递数据。具体来说,通过url传递参数会导致元组的解析非常混乱。在

我希望它足够通用,不知道表单有什么参数,而且它还需要处理文件字段。在

当前如何将表单数据传递到确认页:

@view_config(renderer="templates/derived/load/error.mak", route_name='process_model_route')
def process_model(self):
    #processing logic and validaton, failiure in validation sends user to error.mak
    return HTTPFound(route_url('confirm_model_route', self.request, fparams=self.request.POST))

路线:config.add_route('confirm_model_route', 'rnd2/model/confirm/*fparams')

^{pr2}$

确认/模型.mak模板将包含隐藏的表单。在


Tags: selfconfigurl表单参数modelrequesterror
1条回答
网友
1楼 · 发布于 2024-09-30 16:22:44

这种方法的思想是:

  1. 客户访问页面。在
  2. 服务器呈现表单。在
  3. 客户填写表单并发布到URL。在
  4. 服务器呈现一个新页面,其中包含一个隐藏表单,其中包含它刚刚在POST中接收到的所有数据。在
  5. 客户端发布到URL,确认提交。在
  6. 服务器保存隐藏表单中的数据并重定向。在

现在,根据可用性的不同,您可以决定在这里实际需要多少个不同的url,以及金字塔中有多少个视图。你必须考虑无效数据会发生什么?在

请注意,在上面的大纲中,一旦用户将表单发布到一个URL,该URL必须返回包含隐藏表单的确认页面。如果您试图将用户重定向到一个确认页面,那么您必须以某种方式将数据持久化,无论是在会话中,还是通过您在示例中演示的hack(将所有数据推送到GET中)。第二种解决方案非常糟糕,因为它滥用了HTTP中GET的真正目的。在

还有一个惯例是,每个帖子都应该导致重定向,以避免客户多次提交表单。考虑到这一点,您可以考虑一个简单的解决方案,即拒绝没有“confirmed”标志的帖子,并在提示用户后在javascript中简单地设置“confirmed”标志。这允许您保持表单处理逻辑的简单性。在

如果您不想依赖javascript您不想在会话中持久化表单数据,那么您会遇到在第一篇文章之后不重定向的问题,而不是从上面的大纲中可以简单地看到。在

相关问题 更多 >