request.POST.get()在使用print时显示None

时间:2016-12-14 10:36:57

标签: django django-views

就像问题所说,当我打印时,它首先显示列表/字符串然后显示"无"最后就像这样:

["a","b","c"]
"test"
None
None

脚本

$(document).ready(function() {
            $("#export").click(function () {
              var test = "test";
              var array1 = ['a','b','c'];
              $.ajax({
                url: '/export/csv',
                data: {'array1': JSON.stringify(array1), 'test': JSON.stringify(test)},
                dataType: 'json',
                type: 'POST',
                success: function (data) {
                }
              });
            });
        });

views.py

@csrf_exempt
def export_csv(request):

    print(request.method)
    test1 = request.POST.get('test')
    array1 = request.POST.get('array1')

    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="product-inventory.csv"'

    print(array1)
    print(test1)

    writer = csv.writer(response)
    writer.writerow(['Test1')

    for t in array1:
        writer.writerow([t])

    return response

urls.py

url(r'^export/csv$', product_views.export_csv, name='export_csv')

我知道我在 views.py 中遗漏了一些内容。如果你能指出我正确的方向,那就太好了。

提前致谢!

1 个答案:

答案 0 :(得分:2)

从我的评论中删除:

  

当打印的值是POST请求时,可能是在同一URL的GET请求中打印无值时。

查看print(request.method)的输出,确认URL被访问两次。一个使用POST方法,另一个采用GET方法。

None方法请求期间会打印

GET个值,因为此时request.POST不包含您要查找的键。

如果您只想提供POST方法,则可以demo is here

from django.views.decorators.http import require_http_methods

@csrf_exempt
@require_http_methods(["POST"])
def export_csv(request):
    .... # your implementation

但是,您还应该首先尝试找出GET方法的来源。