django解决跨域请求的问题

django解决跨域请求的问题

解决方案

1.安装django-cors-headers

pip install django-cors-headers

2.配置settings.py文件

 1 INSTALLED_APPS = [
 2     ...
 3     'corsheaders' 4     ...
 5  ] 
 6 
 7 MIDDLEWARE_CLASSES = (
 8     ...
 9     'corsheaders.middleware.CorsMiddleware',
10     'django.middleware.common.CommonMiddleware', # 注意顺序
11     ...
12 )
13 #跨域增加忽略
14 CORS_ALLOW_CREDENTIALS = True
15 CORS_ORIGIN_ALLOW_ALL = True
16 CORS_ORIGIN_WHITELIST = (
17     '*'
18 )
19 
20 CORS_ALLOW_METHODS = (
21     'DELETE',
22     'GET',
23     'OPTIONS',
24     'PATCH',
25     'POST',
26     'PUT',
27     'VIEW',
28 )
29 
30 CORS_ALLOW_HEADERS = (
31     'XMLHttpRequest',
32     'X_FILENAME',
33     'accept-encoding',
34     'authorization',
35     'content-type',
36     'dnt',
37     'origin',
38     'user-agent',
39     'x-csrftoken',
40     'x-requested-with',
41     'Pragma',
42 )

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

猜你喜欢

转载自www.cnblogs.com/c-x-m/p/9265289.html