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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: Python实现抓取网页并且解析的实例