gpt4 book ai didi

forms - 使用 yesod-form 在 POST/Redirect/GET 后保留不正确的用户输入

转载 作者:行者123 更新时间:2023-12-04 08:36:03 25 4
gpt4 key购买 nike

最近我偶然发现了以下问题:
使用 yesod 我想

  • 显示一个应用表单并让用户将他的数据发布到一个特殊的处理程序
  • FormFailure将浏览器重定向到上一页
  • 打印错误信息...
  • ... 并重新显示表单 已填 用户提供的数据不正确

  • 就我而言,这就是 POST/Redirect/GET 是所有关于。

    虽然第 <1-3> 点需要简单直接的实现,但我发现无法实现第 <4> 点!
    yesod-form 包会自动处理这个问题,但不允许在表单解析 <2> 和错误处理 <3,4> 之间进行任何重定向,就像我希望的那样。

    回应迈克尔斯诺伊曼的回答

    您建议我应该序列化提交的数据并在重定向后以某种方式将其注入(inject)表单。这导致了更详细的问题:
  • 如何获取要序列化的数据?

    我知道我可以使用 runRequestBody :: GHandler s m RequestBodyContents ,但是哪些是相关信息(字段的name是自动生成的)?
  • 如何将数据注入(inject)表单?

    如果您查看例如的类型aopt
    aopt :: Field sub master a -> FieldSettings master -> Maybe (Maybe a) -> AForm sub master (Maybe a)

    您会看到它要求默认值与 Field 的类型相同。 ,因此无法重新插入可能无法正确解析的用户提供的数据。

    示例:用户在 intField 中键入“A”。 .现在我希望能够在重定向后在同一字段中显示“A”,但 API 不允许我这样做。

  • 我应该如何处理这个问题?

    最佳答案

    我个人认为使用 POST 请求返回填写好的表单是可以接受的,这就是 yesod-form API 的优化目标。如果您还想在表单提交失败时强制重定向,则需要序列化提交的数据并将其存储在某处,例如:

  • 在数据库中。
  • 在用户 session 中。
  • 作为您重定向到的 URL 的查询字符串参数的一部分。请注意,这种方法不适用于敏感数据,因为任何中间代理都会缓存表单数据。
  • 关于forms - 使用 yesod-form 在 POST/Redirect/GET 后保留不正确的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15683619/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com