当前位置: 移动技术网 > IT编程>脚本编程>Python > django解决跨域请求的问题详解

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

2019年03月21日  | 移动技术网IT编程  | 我要评论

黄菊花的花语,四川特产网,戏剧网

解决方案

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网