以下是我正在寻找的功能 - 用户在默认页面index.html上填写表单。提交时,我收到一个POST请求,其内容我添加到数据库中。接下来,我想加载一个新页面,其内容将取决于表单中的信息。
这是我的实现 - 我在index(request)
函数中处理POST请求。我最初返回HTTPResponseRedirect(navigation/route.html)
,但我后来在搜索StackOverflow后发现,无法重定向和发送表单的内容。我通过返回render(request, 'navigation/route.html', {'form': form})
解决了这个问题。
我只是担心,因为似乎HTTPResponseRedirect
故意阻止用户传递POST请求数据,这意味着我试图绕过结构性限制可能是一个坏主意。
以下是我的views.py的相关部分:
def index(request):
if request.method == 'POST':
# populate form with information from POST request
form = TripForm(request.POST)
if form.is_valid():
# input into database
trip_instance = Trip(**form.cleaned_data)
trip_instance.save()
# redirect
return render(request, 'navigation/route.html', {'form': form})
else:
# either request is not POST or form did not pass validation checks
form = TripForm
return render(request, 'navigation/index.html', {'form': form})
答案 0 :(得分:0)
不是HttpResponseRedirect阻止了这一点,它是HTTP本身的结构; 302重定向告诉浏览器请求新页面,但确实保留了POST字典。
这并不是你不应该做你正在做的事情的原因。正如文档所解释的那样,您应该在POST成功后进行实际重定向,以便浏览器刷新不会导致重新发布表单。
执行所需操作的方法是在要重定向到的URL中传递行程ID,然后在该视图中查询它。或者,您可以将值保存在会话中。