Django 视图中用户的 REQUEST 对象如何从一个对象到另一个不同?



我不确定我所做的是对还是错。但是这个功能让我遇到了一个发生在 Django View 中的非常深奥的事件。

所以代码:

from django.contrib.messages import get_messages
from django.contrib import messages
#Other required modules.
@require_GET
def get_form(request):
#code to get a form.
storage = get_messages(request)
for message in storage:
message = message
if message:
context['message'] = message
html = render(request , 'some_html.html' , context)
return HttpResponse(html)
@require_POST
def submit_form(request):
#Initialize a bounded form.
if form.is_valid():
form.save()
messages.add_message(request, messages.INFO, success_message)
else:
messages.add_message(request, messages.INFO, error_message)    
# ABOVE LINE IS WHERE THE ISSUE OCCURS
return redirect('reverse_url_mapping_to_get_form') 
# Above line is redirecting to "get_form" function(The function preceding this one).

问题:现在我遇到的奇怪事情发生在我在return redirect('reverse_url_mapping_to_get_form')中打错字时(提到的代码的最后一行(。

显然我遇到了 Django 的错误页面,说有"NoReverseMatch"。但是当我重新加载表单(通常通过浏览器刷新,在"url"映射到get_form(request)上(,我发现我在行中添加的错误消息messages.add_message(request, messages.INFO, error_message)被带到了html(some_html.html(。甚至认为发生了错误,我从未成功重定向到URL。

现在我明白了,messages.add_message()请求有些捎带,但是,在发生错误的情况下,它不应该被销毁。重定向未成功执行的情况。

为什么在重新加载时消息仍在请求对象内?

它不应该被销毁(因为它是一个完全独立的 GET 请求;我通过重新加载从浏览器启动了它(?

提前谢谢。

你完全误解了消息框架的工作原理。它不会在请求中存储消息;它们存储在会话中。

相关内容

  • 没有找到相关文章

最新更新