【Python web 开发中, 跨域问题的解决思路是?】

本文介绍了在Django中处理跨域请求的两种常见方案:一是安装并配置django-cors-headers中间件,允许所有来源的跨域请求;二是利用JSONP策略,适用于GET请求。同时,展示了在views.py中直接设置响应头以允许跨域的方法。
摘要由CSDN通过智能技术生成
# 方案1.安装django-cors-headers
pip install django-cors-header
 
配置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',
)
 
# 方案2.使用JSONP
使用Ajax获取json数据时,存在跨域的限制。不过,在Web页面上调用js的script脚本文件时却不受跨域的影响,JSONP就是利用这个来实现跨域的传输。因此,我们需要将Ajax调用中的dataType从JSON改为JSONP(相应的API也需要支持JSONP)格式。
JSONP只能用于GET请求。
 
# 方案3.直接修改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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值