将AJAX请求的标头设置为Django

Don*_*kby 0 python django ajax

我想测试一些AJAX请求到我的Django站点,但服务器不认为我的测试工具的请求是一个AJAX请求.我需要设置什么HTTP标头?

服务器代码有这样的测试:

# in myapp/ajax.py
def my_request(request, some_id):
    if request.is_ajax():
        return json.dumps([some_id, 'processed for AJAX'])

    # some other processing, or an error
Run Code Online (Sandbox Code Playgroud)

我正在使用Postman发送我的AJAX请求,并且我已经学会了设置Accept标头application/json,但是我设置了什么标头来表明它是一个AJAX请求?

在Django代码中,我找到了测试方法:

def is_ajax(self):
    return self.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
Run Code Online (Sandbox Code Playgroud)

当我将HTTP_X_REQUESTED_WITH标头设置为时XMLHttpRequest,测试仍然失败.

Don*_*kby 5

当我打开Chrome开发者工具时,我看到常规的AJAX请求包含X-Requested-With设置的标头XMLHttpRequest.在Postman请求中添加该标头使其工作.这只是一个略有不同的名字.

如果您要进行修改数据的AJAX请求,则需要切换到发出POST请求.这使得Django的跨站点请求伪造工具发挥作用,因此您需要从其他形式的隐藏字段中复制CSRF令牌,然后在X-CSRFToken测试AJAX请求时将其粘贴到标题中.