django如何解决跨域问题[Django框架]

本文主要说明django解决跨域问题,具体如下

1.安装django-cors-headers

pip3 install django-cors-headers

2.配置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',

)

其他解决方案

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

以上是 django如何解决跨域问题[Django框架] 的全部内容, 来源链接: utcz.com/z/539625.html

回到顶部