解决方案
1.安装django-cors-headers
- pip 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。