2017-09-23 16 views
2

例子:在Django中,爲什麼視圖函數需要一個請求參數?從Django文檔

def index(request): 
    return HttpResponse('<h1>hellworld!</h1>') 

def detail(request, question_id): 
    return HttpResponse("Question: %s" % question_id) 

由於request參數從來沒有使用過,我爲什麼要包括在每個函數簽名?

+0

你不用它,但Django呢。一個請求總是發送到一個視圖 – PRMoureu

+1

好吧,有各種各樣的原因,你會使用它。但接受它是一個觀點的合同的一部分,不能只是決定不包括它。 –

回答

0

這些只是例子。在現實世界中,程序員想要查找請求GET參數,解碼JSON POST正文,檢查標題,獲取用戶或會話數據等。

0

Django文檔中的許多示例(以及任何文檔,都是) 。它們很簡單,因爲一個真實例子的複雜性會從正在做的事情中消失。

在實際使用情況下,您經常需要訪問request對象。您可能想知道哪個User附加到requestrequest.user)或請求是GET還是POSTrequest.method)。

還可以檢查報頭(request.headers),進行解碼,具有POST請求(json.loads(request.body))發送的JSON對象等

2

web服務器的目的是回覆HTTP請求(簡單來說) 。 Django是一個Web框架,根據它收到的請求產生響應。

處理請求的業務邏輯由Django Views完成,這是他們的目的。這就是爲什麼Django向視圖函數提供請求的原因,因此代碼可以訪問請求數據並選擇應該採取哪些操作以及應該發回哪個響應(即使該特定視圖未使用它)。

要求視圖接收請求作爲參數的決定是由Django開發人員作出的實現決定,使其成爲視圖與「系統」其餘部分的接口的一部分。其他框架可能會選擇使其在全球範圍內可用,而不是直接將它提供給視圖/控制器,但其他方法的優點是其他討論。

相關問題