解决方案

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 = (
  \' HttpRequest\',
  \'X_FILENAME\',
  \'accept-encoding\',
  \'authorization\',
  \'content-type\',
  \'dnt\',
  \'origin\',
  \'user-agent\',
  \'x-csrftoken\',
  \'x-requested-with\',
  \'Pragma\',
)

OK!问题解决!

其他解决方案

另外还从网上看到其他两种解决方案,但都不太合适。在此列出,供大家参考

1.使用JSONP

使用Ajax获取json数据时,存在跨域的限制。不过,在Web页面上调用js的 脚本文件时却不受跨域的影响,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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

收藏 打印