Django:request.GET 和 KeyError
Posted
技术标签:
【中文标题】Django:request.GET 和 KeyError【英文标题】:Django: request.GET and KeyError 【发布时间】:2011-04-20 05:21:16 【问题描述】:代码:
# 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 有点困难)?
【问题讨论】:
【参考方案1】:您的服务器不应产生 500 错误页面。
您可以通过以下方式避免错误:
my_param = request.GET.get('param', default_value)
或:
my_param = request.GET.get('param')
if my_param is None:
return HttpResponseBadRequest()
【讨论】:
是的,是的。您可能还会发现您必须单独对参数进行更具体的检查,以确保适当的值范围、参数之间的兼容性等。 我使用 django 表单来验证输入,即使是 ajax 调用也是如此。如果您有许多输入参数,它会更容易使用,并且它会为您完成大部分工作。 你回答节省我的时间。 如果?param=
设置为无值,您仍然会收到 keyerror【参考方案2】:
是的,在这种情况下,您应该检查 KeyError
。或者你可以这样做:
if 'param' in request.GET:
my_param = request.GET['param']
else:
my_param = default_value
【讨论】:
我找到的唯一合适的答案。谢谢【参考方案3】:如果参数不存在,如何传递默认值?
my_param = request.GET.get('param', 'defaultvalue')
【讨论】:
默认值通常不可用。以上是关于Django:request.GET 和 KeyError的主要内容,如果未能解决你的问题,请参考以下文章
django学习——request.POST.get(‘key’) request.GET.get('key', '')