欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

django解决跨域请求的问题详解

程序员文章站 2022-06-08 21:04:11
解决方案 1.安装django-cors-headers pip install django-cors-headers 2.配置settings...

解决方案

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

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