在前面的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')
确认/模型.mak模板将包含隐藏的表单。在
这种方法的思想是:
现在,根据可用性的不同,您可以决定在这里实际需要多少个不同的url,以及金字塔中有多少个视图。你必须考虑无效数据会发生什么?在
请注意,在上面的大纲中,一旦用户将表单发布到一个URL,该URL必须返回包含隐藏表单的确认页面。如果您试图将用户重定向到一个确认页面,那么您必须以某种方式将数据持久化,无论是在会话中,还是通过您在示例中演示的hack(将所有数据推送到GET中)。第二种解决方案非常糟糕,因为它滥用了HTTP中GET的真正目的。在
还有一个惯例是,每个帖子都应该导致重定向,以避免客户多次提交表单。考虑到这一点,您可以考虑一个简单的解决方案,即拒绝没有“confirmed”标志的帖子,并在提示用户后在javascript中简单地设置“confirmed”标志。这允许您保持表单处理逻辑的简单性。在
如果您不想依赖javascript和您不想在会话中持久化表单数据,那么您会遇到在第一篇文章之后不重定向的问题,而不是从上面的大纲中可以简单地看到。在
相关问题 更多 >
编程相关推荐