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', '')

django QueryDict对象

Django view视图

多个值的 Django request.GET('variable')

Django接口数据处理

使用 django.shortcuts.redirect 添加 request.GET 变量