django解决跨域请求的问题
解决方案
1.安装django-cors-headers
pip install django-cors-headers
2.配置settings.py文件
1 INSTALLED_APPS = [ 2 ... 3 'corsheaders', 4 ... 5 ] 6 7 MIDDLEWARE_CLASSES = ( 8 ... 9 'corsheaders.middleware.CorsMiddleware', 10 'django.middleware.common.CommonMiddleware', # 注意顺序 11 ... 12 ) 13 #跨域增加忽略 14 CORS_ALLOW_CREDENTIALS = True 15 CORS_ORIGIN_ALLOW_ALL = True 16 CORS_ORIGIN_WHITELIST = ( 17 '*' 18 ) 19 20 CORS_ALLOW_METHODS = ( 21 'DELETE', 22 'GET', 23 'OPTIONS', 24 'PATCH', 25 'POST', 26 'PUT', 27 'VIEW', 28 ) 29 30 CORS_ALLOW_HEADERS = ( 31 'XMLHttpRequest', 32 'X_FILENAME', 33 'accept-encoding', 34 'authorization', 35 'content-type', 36 'dnt', 37 'origin', 38 'user-agent', 39 'x-csrftoken', 40 'x-requested-with', 41 'Pragma', 42 )
OK!问题解决!
其他解决方案
另外还从网上看到其他两种解决方案,但都不太合适。在此列出,供大家参考
1.使用JSONP
使用Ajax获取json数据时,存在跨域的限制。不过,在Web页面上调用js的script脚本文件时却不受跨域的影响,JSONP就是利用这个来实现跨域的传输。因此,我们需要将Ajax调用中的dataType从JSON改为JSONP(相应的API也需要支持JSONP)格式。
JSONP只能用于GET请求。
2.直接修改Django中的views.py文件
修改views.py中对应API的实现函数,允许其他域通过Ajax请求数据:
def myview(_request):
response = HttpResponse(json.dumps({“key”: “value”, “key2”: “value”}))
response[“Access-Control-Allow-Origin”] = “*”
response[“Access-Control-Allow-Methods”] = “POST, GET, OPTIONS”
response[“Access-Control-Max-Age”] = “1000”
response[“Access-Control-Allow-Headers”] = “*”
return response