Django:request.GET和KeyError

gls*_*lss 22 python django django-urls

码:

# 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?
Run Code Online (Sandbox Code Playgroud)

在PHP框架中,我通常必须检查存在的参数,如果不存在,则将用户重定向到某个地方.但在Django中,未出现的参数会导致500错误页面并且似乎需要行为.那么按原样保留代码还是有更好的实践可以吗?我应该总是使用像/ myaction/paramvalue /而不是/ myaction传递的标准参数吗?param_name = param_value(为ajax请求构建这样的URL有点困难)?

Ned*_*der 42

您的服务器永远不会产生500错误页面.

您可以使用以下命令来避免错误:

my_param = request.GET.get('param', default_value)
Run Code Online (Sandbox Code Playgroud)

要么:

my_param = request.GET.get('param')
if my_param is None:
    return HttpResponseBadRequest()
Run Code Online (Sandbox Code Playgroud)


Mik*_*one 7

是的,KeyError在这种情况下你应该检查.或者你可以这样做:

if 'param' in request.GET:
    my_param = request.GET['param']
else:
    my_param = default_value
Run Code Online (Sandbox Code Playgroud)