django解决跨域请求的问题详解
解决方案
1.安装django-cors-headers
pipinstalldjango-cors-headers
2.配置settings.py文件
INSTALLED_APPS=[ ... 'corsheaders', ... ] MIDDLEWARE_CLASSES=( ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware',#注意顺序 ... ) #跨域增加忽略 CORS_ALLOW_CREDENTIALS=True CORS_ORIGIN_ALLOW_ALL=True CORS_ORIGIN_WHITELIST=( '*' ) CORS_ALLOW_METHODS=( 'DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'VIEW', ) CORS_ALLOW_HEADERS=( 'XMLHttpRequest', 'X_FILENAME', 'accept-encoding', 'authorization', 'content-type', 'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with', 'Pragma', )
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请求数据:
defmyview(_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”]=“*” returnresponse
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。