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".