Django 跨域问题解决方式

只会出现在post请求中,才会出现跨域请求。
方法1:
ajax前面伪造csrf_token请求。
$.ajaxSetup({
    data:{csrfmiddlewaretoken:'{{ csrf_token }}'}
})
然后就可以发送post请求。

方法二:
利用JSOP技术(实际利用的script引入资源)

客户端ajax的相关设置
$.ajax({
    url:"http://localhost:8000/getdata/",
    // 相当于传入callback=fn的参数
    dataType:"JSONP", // 使用JSONP
    jsonp:'callback', // 回调参数的名称
    jsonpCallback:'fn' // 回调函数的名称,   相当于一个参数,callback-fn
})
fn(data){
    #  在这里开始使用相关的配置文件
}


服务器的必须配合使用:
callback = request.GET.get("callback")
print(callback)
return HttpResponse("%s('情人节快乐!')" % callback)
方法三:
# 让Django服务器可以接收所有的请求。
1、pip install django-cors-headers
2、在App中注册  'corsheaders'
3、在中间件设置:MIDDLEWARE = (
        'corsheaders.middleware.CorsMiddleware',
        'django.middleware.common.CommonMiddleware', 
    )

 # 跨域增加忽略
    CORS_ALLOW_CREDENTIALS = True
    CORS_ORIGIN_ALLOW_ALL = True
	
# 跨域允许的请求方式(可选)
CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
)
# 跨域允许的头部参数(可选)
CORS_ALLOW_HEADERS = (
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    'Pragma',
)  

方法四:
	# 通过给个别函数添加相关的函数。
	def home(request):
	    response = HttpResponse(json.dumps({"aaa": "bbb", "ccc": "ddd"}))
	    response["Access-Control-Allow-Origin"] = "*"
	    response["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS"
	    response["Access-Control-Max-Age"] = "1000"
	    response["Access-Control-Allow-Headers"] = "*"
	
	    print(request.method)
	    return response

前端发送ajax的时候需要把dataType:"*"修改一下:
$.ajax({
	type: "post",
		url: "http://127.0.0.1:8000/home/",
		dataType: '*', //服务器返回*格式数据
		success: function(data) {
			console.log(data)
			
		},
		error: function(err) {
			console.log("错误了"+err)
		}
});


你可能感兴趣的:(Python)