詹戈:这是坏习惯吗?

2024-05-16 16:20:09 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我要寻找的功能——用户在默认页面上填写表单,索引.html. 当它被提交时,我收到一个POST请求,我将其内容添加到数据库中。接下来,我想加载一个新页面,其内容将取决于表单中的信息。在

这是我的实现——我在我的index(request)函数中处理POST请求。我最初返回了一个HTTPResponseRedirect(navigation/route.html),但后来在搜索StackOverflow之后发现,不可能同时重定向和发送表单的内容。我通过返回render(request, 'navigation/route.html', {'form': form})来解决这个问题。在

我只是担心,因为HTTPResponseRedirect故意阻止用户传递请求后数据,这意味着我试图绕过结构限制可能是个坏主意。在

这是我的视图.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})

Tags: 用户form表单内容indexifisrequest
1条回答
网友
1楼 · 发布于 2024-05-16 16:20:09

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

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

您想要的方法是在重定向到的URL中传递trip ID,然后在该视图中查询它。或者,您可以在会话中保存该值。在

相关问题 更多 >