2010-10-02 75 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