Heroku Django请求.POST给出错误的值



我使用django在heroku构建中部署了一个应用程序。在我的djangoviews.py中,我使用request.POST获取一些值,并将其存储在global变量中,这样我就可以在另一个函数中访问该值,然后将其呈现到模板中。在开发服务器上运行得很好,但当我在heruko上部署它时,request.POST没有检索到正确的值。

views.py:

serv='--'
def home(request):
global serv
if request.method=='POST':
dayCheck.clear()
serv=request.POST['service']
return HttpResponseRedirect('func')
def func(request):
global serv
#Doing something,does not involve serv
return render(request,'index.html',{'service':serv})

当我尝试在home()中记录serv时,它给出了正确的值,但在func中给出了不同的值并且呈现了相同的值,大部分是我之前单击的值,或者有时只是声明的--。请帮帮我!提前感谢

不要。在Web服务器中使用全局状态是一种非常严重的反模式。通常以后,几个Django进程将同时运行以处理请求:这意味着下一个请求可以由不同的Django过程处理。此外,还可能在不同用户的请求之间进行处理。

通常,您通过URL参数、querystring、数据库、POST参数、会话变量和cookie来传递数据(其中会话变量和Cookie通常也不是一个好主意,因为它们很容易与将某些状态存储到会话或cookie中的其他视图相冲突(。

因此,例如,您可以使用URL参数,将func映射到:

urlpatterns = [
# …,
path('func/<path:param>/', views.func, name='func')
]

然后你就用提出请求

from django.shortcuts import redirect
def home(request):
if request.method == 'POST':
dayCheck.clear()
serv = request.POST['service']
return redirect('func', param=serv)
def func(request, param):
# here param has the value for serv in the previous request
return render(request,'index.html',{'service':serv})

由于它将向func发出GET请求,因此func也不允许对实体进行任何更改,因为这是由安全方法[w3.org/上的HTTP规范指定的

特别是,已经制定了一个惯例,即GET和HEAD方法不应该具有采取除检索之外的操作的意义。这些方法应该被认为是";安全";。

相关内容

最新更新