在django视图中处理ajax请求的最佳方法

时间:2014-01-11 07:42:31

标签: python django

我们假设,在网页中我有一个ajax请求,它将不同的参数发送到django视图(例如,通过POST)。

例如:

  • 产品(整数列表)
  • products_params(字符串列表)

两个列表必须具有相同的长度。

确保数据正确的最佳方法是什么?

以下是处理此请求的伪代码。

if 'products' and 'products_params' in request.POST and request.is_ajax():
    try:
        products = [int(p) for p in request.POST['products']]
    except ValueError:
        return HttpResponseBadRequest()
    products_params = request.POST['products_params']
    if len(products) != len(products_params):
        return HttpResponseBadRequest()
    # ok, data is correct, now we can process it

有更好的方法吗?如何确定,由于我们的视图中存在无效数据,我们没有得到意外的异常?

P.S。这是仅限ajax的处理。没有向用户显示任何表单。

1 个答案:

答案 0 :(得分:1)

怎么样:

    products = [int(p) for p in request.POST['products'] if str(p).isdigit()]

    products = [int(p) for p in request.POST['products'] if unicode(p).isnumeric()]

我推荐第一个,因为如果您使用ñ,例如unicode会抛出错误。

您的代码可能如下所示:

if request.is_ajax():
    products = [int(p) for p in request.POST.get('products',[]) if str(p).isdigit()]
    products_params = request.POST.get('products_params', [])
    if (not (products and products_params)) or (len(products) != len(products_params)):
        return HttpResponseBadRequest()