解决方案
1.安装django-cors-headers
1
|
pip install django - cors - headers
|
2.配置settings.py文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
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请求数据:
1
2
3
4
5
6
7
|
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
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/apple9005/article/details/54427902