我使用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方法不应该具有采取除检索之外的操作的意义。这些方法应该被认为是";安全";。