gpt4 book ai didi

POST请求后Django设置表单字段

转载 作者:行者123 更新时间:2023-12-04 13:18:33 25 4
gpt4 key购买 nike

我正在使用基于类的 View (FormView),我想在提交表单后保留搜索关键字(POST 请求)。我在 form_valid 中试过这个方法:

def form_valid(self, form):
self.initial['search'] = form.data['search']
...

但这会向所有用户显示。这是在许多网络搜索表单(更不用说 Google 搜索)上非常常见的解决方案,所以我想知道如何在 Django 中做到这一点。

更新:UTC 2017 年 6 月 19 日星期一 13:18:42

根据下面的一些答案,我将不得不重新表述我的问题。

我有一个带有几个输入字段的简单表单,提交表单后,它将查询其他站点以根据搜索词获取结果。我想将一些结果存储到数据库中,主要是为了生成统计信息,重新显示带有选定字段的表单并显示结果。

当前数据驻留在一个类对象上,它从 POST 传递到 GET。出于明显的安全原因,这不是一个好的解决方案:
class SearchView(FormView):
...
data = dict()

def form_valid(self, form):
....
self.data['results'] = results

def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context['data'] = self.data.pop('results', None)
return context

问题:

在同一页面上显示表单(带有选定字段)和结果的最佳方式是什么,最好没有 session 或在 POST 和 GET 之间将它们存储在数据库中。

我已经考虑过的要点:
  • 不要重定向用户(立即使用当前上下文渲染模板,而我们仍然有响应对象) - 我不喜欢页面刷新会重新提交表单的事实。
  • 将响应保存到诸如 Redis 之类的键值存储中,并将用户重定向到诸如 results/{result_id} 之类的内容,我们可以在其中从数据库中检索响应以使用数据预填充表单并显示结果 - 这听起来很合理,但我必须添加另一个组件才能将结果从 POST 传递到 GET。
  • 对这种类型的表单使用 GET - 我的理解是我们应该使用 POST 进行数据修改
  • 最佳答案

    Google 和其他类似搜索使用 GET传递查询字符串的参数

    示例 :

  • 谷歌 test
  • 结果网址将为 https://www.google.ru/?q=test

  • 所以基本上你需要使用相同的方法并将搜索字符串传递为 GET参数。

    这是一般的想法
    class SearchView(View):
    success_url = reverse('result-view')

    def get_success_url(self):
    success_url = super().get_success_url()
    return '{0}?search={1}'.format(success_url, self.form.cleaned_data['search'])
    ...

    class ResultView(View):
    def get(self, request, *args, **kwargs):
    search_string = request.GET.get('search', '')

    关于POST请求后Django设置表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44532057/

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