Django 解决ajax跨域问题

简介: 解决ajax跨域问题

1.安装django-cors-headers


pipinstalldjango-cors-headers


2.配置settings.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=TrueCORS_ORIGIN_ALLOW_ALL=TrueCORS_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',
)
#部署到云服务上必备ALLOWED_HOSTS= ['*']


其他解决方案


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

相关文章
|
6月前
|
JSON 前端开发 JavaScript
Django入门到放弃之ajax
Django入门到放弃之ajax
|
8月前
|
前端开发 Python
Django框架中Ajax GET与POST请求的实战应用
Django框架中Ajax GET与POST请求的实战应用
|
8月前
|
JSON 前端开发 JavaScript
Django——Ajax请求
Django——Ajax请求
|
9月前
|
JSON 前端开发 JavaScript
Django实践-04静态资源和Ajax请求
Django实践-04静态资源和Ajax请求
Django实践-04静态资源和Ajax请求
|
9月前
|
前端开发 JavaScript Python
Django 模板中使用 Ajax POST
Django 模板中使用 Ajax POST
79 0
|
9月前
|
JSON 前端开发 JavaScript
前端知识笔记(三十七)———Django与Ajax
前端知识笔记(三十七)———Django与Ajax
61 0
|
9月前
|
JSON 前端开发 JavaScript
前端知识笔记(二)———Django与Ajax
前端知识笔记(二)———Django与Ajax
72 0
N..
|
9月前
|
XML JSON 前端开发
jQuery实现Ajax
jQuery实现Ajax
N..
91 1
|
9月前
|
XML 前端开发 JavaScript
jQuery中ajax如何使用
jQuery中ajax如何使用
120 0
|
8月前
|
前端开发 JavaScript
杨校老师课堂之基于Servlet整合JQuery中的Ajax进行表单提交[基于IDEA]
杨校老师课堂之基于Servlet整合JQuery中的Ajax进行表单提交[基于IDEA]
62 0