django跨域问题解决
在django中,访问非同源网站(协议,域名,端口号)时,会出现:
解决方案:
1.安装 django-cors-headers
pip install django-cors-headers
2.修改 setting.py
INSTALLED_APPS = [ ... 'corsheaders', ... ] # 添加中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware',# 默认 'django.contrib.sessions.middleware.SessionMiddleware', # 默认 'corsheaders.middleware.CorsMiddleware',# 默认 # 注意顺序,即在上一个的下面 'django.middleware.common.CommonMiddleware', # 新增 ✔ 'django.middleware.csrf.CsrfViewMiddleware',# 默认 'django.contrib.auth.middleware.AuthenticationMiddleware',# 默认 'django.contrib.messages.middleware.MessageMiddleware', # 默认 'django.middleware.clickjacking.XFrameOptionsMiddleware',# 默认 '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', )
然后再次运行:
xxx.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <script src="js/jquery-1.7.2.js"></script> <script type="text/javascript"> function upd() { $.ajax({ type: "GET", data: "a=1", url: "http://127.0.0.1:8000/books/?format=json", success: function(result) { console.log(result); //alert(result) } }); } </script> <body> <!--获取--> <button id="btn2" onclick="upd()">Get request 获取</button> </body> </html>