我已經使用 django 在 heroku 構建中部署了一個應用程式。在我的 django 中,我使用并存盤在一個變數中views.py獲取一些值,以便我可以在另一個函式中訪問該值,然后將其呈現到模板中。Eveything 在開發服務器上運行良好,但是當我在 heruko 上部署它時,并沒有恢復正確的值。request.POSTglobalrequest.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})
當我嘗試登錄serv時,home()它會給出正確的值,但不同func
的值會呈現相同的值,主要是我之前單擊的值,或者有時它會--像宣告的那樣。請幫我!提前致謝
uj5u.com熱心網友回復:
請不要。在網路服務器中使用全域狀態是一種非常非常嚴重的反模式。通常稍后會運行多個 Django 行程來同時處理請求:這意味著下一個請求可以由不同的 Django 行程處理。此外,也有可能在其間處理不同用戶的請求。
通常你通過 URL 引數、查詢字串、資料庫、POST 引數、會話變數和 cookie 傳遞資料(其中會話變數和 cookie 通常也不是一個好主意,因為它們很容易與將某些狀態存盤到會話或 cookie)。
因此,您可以使用例如映射func到的 URL 引數:
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})
因為它會讓一個GET請求func,func此外還沒有允許進行該物體的任何改變要么,因為這是由特定的HTTP規范安全的方法[w3.org] :
特別是,已經建立了約定,即 GET 和 HEAD 方法不應該具有采取除檢索之外的操作的意義。這些方法應該被認為是“安全的”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/420713.html
標籤:
