首页 > 上网技巧 > Django解决跨域请求问题

Django解决跨域请求问题

时间:2020-11-07 20:01 作者:QQ地带 我要评论

几种方法
django-cors-headers
JsonP
views.py
django-cors-headers
首先安装
 
pip install django-cors-headers
然后在 settings.py 里配置一番就可以
 
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',
)
大功告成了。
 
JsonP
使用Ajax获取 json 数据时,存在跨域的限制。不过,在Web页面上调用js的script脚本文件时却不受跨域的影响,JSONP就是利用这个来实现跨域的传输。因此,我们需要将Ajax调用中的dataType从JSON改为JSONP(相应的API也需要支持JSONP)格式。
 
JSONP只能用于GET请求。
 
本文不介绍该方法,需要的同学请自行搜索
 
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

标签: Django
顶一下
(0)
0%
踩一下
(0)
0%

Google提供的广告