解决方案
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