【问题标题】:How to display data resulting from POST in django view?如何在 Django 视图中显示 POST 产生的数据?
【发布时间】:2010-11-16 23:19:18
【问题描述】:

我有一个表单,它将路径作为输入,分析该目录中的文件和子文件夹,将信息存储在数据库中,然后向用户显示有关刚刚解析的文件的一些统计信息。这是目前使用 Django 视图和 render_to_response 完成的。

根据我所阅读的所有内容,在处理 POST 时使用 HttpResponseRedirect 以外的任何内容都是不正确的,因为如果刷新页面,使用 POST 数据生成的页面会重新提交表单。

我的问题是,由于分析提供的路径上的文件,最终会显示大量摘要数据。如何使用 httpResponseRedirect 显示该数据?由于数据量大,使用 django.core.urlresolvers.reverse 将其作为 GET 参数发送似乎不可行。

【问题讨论】:

    标签: django post httpresponse render-to-response


    【解决方案1】:

    【讨论】:

    • 我没有想到这一点。 request.session 在服务器端维护,而不是实际随请求本身发送的东西,因此这将允许我存储此报告中生成的大量数据并重定向到显示它的页面。我是 Web 开发的新手,这似乎不是会话的预期用途,但它似乎是解决这个问题的一个相对优雅的解决方案。谢谢。
    • 这个方法最终非常顺利。我只是将我创建的结果对象放在 request.session 中,然后在我重定向到的视图中访问它。
    【解决方案2】:

    我假设您的 POST 句柄从提交的表单数据中创建了一些数据库对象,这是正确的吗?如果是这样,那么你可以做这样的事情(:

        my_obj = MyModel.objects.create(**form.cleaned_data) # This is the part yuo already have, most probably expressed with some other code, but still..
        return HttpResponseRedirect('/url/to/redirect/?id=%d' % obj.id)
    

    redirect like 实际上应该使用reverse() 函数,我认为您应该有一个用于编辑 MyModel 对象的 URL。然后你可以这样做:

        return HttpResponseRedirect(reverse('edit-mymodel', (), {'id': obj.id}))
    

    相关的 URL 如下所示:

    url('^edit/mymodel/(?P<id>\d+)$', 'apps.myapp', name='edit-mymodel')
    

    【讨论】:

    • 是的,我想过,但这里的实际行为是解析数千个日志文件,在数据库中创建数千个对象,然后显示详细的摘要统计信息。出于这个原因,很难看出我如何指向单个对象,除非我要专门为此操作的结果创建一个对象。这可能是最好的长期解决方案。
    • 好吧,这看起来像是一个自然的批处理示例 - 添加 Batch 模型并使用 ForeignKey 使每个单独的对象指向它,然后使用 batch.id 进行重定向。
    【解决方案3】:

    一个粗略但简单的解决方案是将您的数据写入一个 json 文本文件,然后在您的重定向页面中读取它(这也将避免您在刷新页面时重建数据)

    【讨论】:

      猜你喜欢
      • 2015-11-25
      • 2011-05-17
      • 1970-01-01
      • 2020-10-26
      • 2021-12-08
      • 2020-10-11
      • 2023-03-12
      • 2020-05-27
      • 2017-07-05
      相关资源
      最近更新 更多