2010-10-02 40 views
15

代碼:Django的:和request.GET中KeyError異常

# it's an ajax request, so parameters are passed via GET method 
def my_view(request): 
    my_param = request.GET['param'] // should I check for KeyError exception? 

在PHP框架我通常要檢查參數存在某處重定向用戶,如果它沒有。但是在Django中,未出現的參數導致500錯誤頁面,並且它看起來是期望的行爲。那麼保留代碼還是有更好的實踐是可以的?我應該總是使用像/ myaction/paramvalue /而不是/ myaction傳遞的標準參數嗎?param_name = param_value(爲Ajax請求建立這樣的URL有點困難)?

回答

30

你的服務器不應該產生500錯誤頁面。

您可以通過使用避免錯誤:

my_param = request.GET.get('param', default_value) 

或:

my_param = request.GET.get('param') 
if my_param is None: 
    return HttpResponseBadRequest() 
+1

btw嘗試...除了塊似乎是更好的情況下,我有幾個參數(除了塊insteat幾個檢查無)。 – glss 2010-10-02 12:22:15

+0

是的,的確如此。您也可能會發現,您必須對參數進行更具體的檢查,以確定適當的值範圍,參數之間的兼容性等。 – 2010-10-02 12:49:18

+0

我使用django表單來驗證輸入,即使對於ajax調用。如果您有許多輸入參數,使用起來更容易,並且它爲您完成大部分工作。 – OmerGertel 2010-10-02 14:42:09

4

是的,在這種情況下,您應該檢查KeyError。或者你可以這樣做:

if 'param' in request.GET: 
    my_param = request.GET['param'] 
else: 
    my_param = default_value 
0

如何通過默認值,如果參數不存在?

my_param = request.GET.get('param', 'defaultvalue') 
+0

defaultvalue不經常可用。 – glss 2010-10-02 12:14:34