Django:这是不好的做法吗?

时间:2017-08-09 18:27:22

标签: python html django http styles

以下是我正在寻找的功能 - 用户在默认页面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})

1 个答案:

答案 0 :(得分:0)

不是HttpResponseRedirect阻止了这一点,它是HTTP本身的结构; 302重定向告诉浏览器请求新页面,但确实保留了POST字典。

这并不是你不应该做你正在做的事情的原因。正如文档所解释的那样,您应该在POST成功后进行实际重定向,以便浏览器刷新不会导致重新发布表单。

执行所需操作的方法是在要重定向到的URL中传递行程ID,然后在该视图中查询它。或者,您可以将值保存在会话中。