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请求
|
28天前
|
前端开发 JavaScript Python
Django 模板中使用 Ajax POST
Django 模板中使用 Ajax POST
19 0
|
28天前
|
JSON 前端开发 JavaScript
Django实践-04静态资源和Ajax请求
Django实践-04静态资源和Ajax请求
Django实践-04静态资源和Ajax请求
|
28天前
|
JSON 前端开发 JavaScript
前端知识笔记(三十七)———Django与Ajax
前端知识笔记(三十七)———Django与Ajax
29 0
|
28天前
|
JSON 前端开发 JavaScript
前端知识笔记(二)———Django与Ajax
前端知识笔记(二)———Django与Ajax
35 0
|
7月前
|
SQL 前端开发 JavaScript
29 Django高级- Ajax
29 Django高级- Ajax
32 0
|
Python
Django跨域问题解决
Django跨域问题解决
100 0
|
4天前
|
Linux 数据库管理 Python
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
49 4
|
7天前
|
SQL 前端开发 关系型数据库
28. Python Web 编程:Django 基础教程
28. Python Web 编程:Django 基础教程
17 2
|
9天前
|
缓存 安全 中间件
Python小白必备!清华大牛整理的《Django零基础入门到精通》手册
Django 是 Python 社区的两大最受欢迎的 Web 框架之一(另一个是 Flask)。凭借功能强大的脚手架和诸多开箱即用的组件,可以使你能够以最小的代价构建和维护高质量的Web应用。 从好的方面来看,Web 开发激动人心且富于创造性;从另一面来看,它却是份繁琐而令人生厌的工作。 通过减少重复的代码,Django 使你能够专注于 Web 应用上有趣的关键性的东西。 为了达到这个目标,Django提供了通用Web开发模式的高度抽象,提供了频繁进行的编程作业的快速解决方法,以及为“如何解决问题”提供了清晰明了的约定。 同时,Django 尝试留下一些方法,来让你根据需要在framework