[Python django解决跨域请求的问题]
解决方案
1.安装django-cors-headers
pip3 install django-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请求数据:
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
版权归原作者 Codeoooo 所有, 如有侵权,请联系我们删除。