Heroku Django request.POST 给出了错误的值
Heroku Django request.POST giving wrong values
我已经使用 django.In 我的 django 在 heroku 构建中部署了一个应用程序 views.py
我正在使用 request.POST
获取一些值并存储在 global
变量中,这样我就可以在另一个函数中访问该值,然后将其呈现到模板中。
Eveything 在开发服务器上运行良好,但是当我将它部署在 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
中给出了不同的值
并且呈现相同的内容,主要是我之前单击的值,或者有时它只是声明的 --
。
请帮我!
提前致谢
请不要。在网络服务器中使用全局状态是一种非常非常严重的反模式。通常稍后几个 Django 进程将 运行 并发处理请求:这意味着下一个请求可以由不同的 Django 进程处理。此外,也有可能处理 不同 用户的请求。
通常您通过 URL 参数、查询字符串、数据库、POST 参数、会话变量和 cookie 传递数据(其中会话变量和 cookie 通常也不是一个好主意,因为这些很容易与将某些状态存储到会话或 cookie 中的其他视图发生冲突。
因此,您可以使用 URL 参数,将 func
映射到:
urlpatterns = [
# …,
path('func/<strong><path:param></strong>/', 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'<strong>, param=serv</strong>)
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
此外 不允许 对实体进行任何更改,因为这是由 HTTP specifications on safe methods [w3.org]:
指定
In particular, the convention has been established that the GET and HEAD methods SHOULD NOT have the significance of taking an action other than retrieval. These methods ought to be considered "safe".
我已经使用 django.In 我的 django 在 heroku 构建中部署了一个应用程序 views.py
我正在使用 request.POST
获取一些值并存储在 global
变量中,这样我就可以在另一个函数中访问该值,然后将其呈现到模板中。
Eveything 在开发服务器上运行良好,但是当我将它部署在 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
中给出了不同的值
并且呈现相同的内容,主要是我之前单击的值,或者有时它只是声明的 --
。
请帮我!
提前致谢
请不要。在网络服务器中使用全局状态是一种非常非常严重的反模式。通常稍后几个 Django 进程将 运行 并发处理请求:这意味着下一个请求可以由不同的 Django 进程处理。此外,也有可能处理 不同 用户的请求。
通常您通过 URL 参数、查询字符串、数据库、POST 参数、会话变量和 cookie 传递数据(其中会话变量和 cookie 通常也不是一个好主意,因为这些很容易与将某些状态存储到会话或 cookie 中的其他视图发生冲突。
因此,您可以使用 URL 参数,将 func
映射到:
urlpatterns = [
# …,
path('func/<strong><path:param></strong>/', 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'<strong>, param=serv</strong>)
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
此外 不允许 对实体进行任何更改,因为这是由 HTTP specifications on safe methods [w3.org]:
In particular, the convention has been established that the GET and HEAD methods SHOULD NOT have the significance of taking an action other than retrieval. These methods ought to be considered "safe".