2012-04-26 41 views
0

我在我的Django的觀點得到這個代碼:nginx的,Django和x_requested_with:request.is_ajax()返回false

if request.is_ajax(): 
    if request.method == 'POST': 
     data = json.loads(request.raw_post_data) 

我送這個請求,通過捲曲:

curl -v -i -H "Content-Type:application/json" -H "X_REQUESTED_WITH:XMLHttpRequest" -X POST -d '{"tweet_id":"189881044923719680", "question_id":"1", "choice_one":"T", "choice_two":"F", "choice_three":"F", "extra_passback":"common cold"}' http://ec[...].compute-1.amazonaws.com/question/answer/ 

這在我打開我的開發Django服務器時起作用。在製作中我運行nginx和gunicorn。捲曲聲明不起作用。

request.is_ajax()返回False(is_ajax將查找x_requested_with頭)。

我想,這一定有可能與NGINX配置做。但我不確定。我需要改變什麼?

+0

試試這個:http://wiki.nginx.org/HttpProxyModule#proxy_pass_header – ilvar 2012-04-27 05:06:18

回答

2

嘗試用破折號改變下劃線在X_REQUESTED_WITH:XMLHttpRequestX-REQUESTED-WITH:XMLHttpRequest

我曾與nginx的相同問題,因爲代理從請求刪除X_REQUESTED_WITH領域。默認情況下,nginx將下劃線標記爲無效,並忽略無效標題。

您可以使用nginx指令來允許使用underscores_in_headers on;的標頭中的下劃線,或者不要忽略與ignore_invalid_headers off;無效的標頭。

在我的具體情況中,我使用python請求作爲客戶端,將django作爲服務器,將nginx作爲代理,並解決了我將X_REQUESTED_WITH重命名爲X-REQUESTED-WITH的問題。 (Django的自動添加'HTTP_'爲x-頭名開始前使在request.META.提供的報頭)

import requests 
headers = {'X-REQUESTED-WITH':'XMLHttpRequest'} 
r = requests.post(url, data=payload, headers=headers)