CORS django“访问控制允许来源”

django

1个回答

写回答

听你的

2025-06-12 21:05

+ 关注

Django
Django

CORS Django访问控制允许来源

CORS(跨域资源共享)是一种机制,它允许Web应用程序在浏览器中访问不同域的资源。在Django框架中,我们可以使用CORS库来实现访问控制允许来源。本文将介绍如何在Django中配置CORS,并提供一个简单的案例代码来演示其使用。

1. 安装CORS库

在开始之前,我们需要先安装Django CORS库。在命令行中运行以下命令来安装它:

Python

pip install Django-cors-headers

2. 配置CORS

接下来,我们需要在Django项目的设置文件中配置CORS。打开项目的settings.py文件,并添加以下代码:

Python

INSTALLED_APPS = [

...

'corsheaders',

...

]

MIDDLEWARE = [

...

'corsheaders.middleware.CorsMiddleware',

'Django.middleware.common.CommonMiddleware',

...

]

CORS_ORIGIN_ALLOW_ALL = False

CORS_ORIGIN_WHITELIST = [

'http://example.com',

'https://example.com',

]

CORS_ALLOW_METHODS = [

'GET',

'POST',

'PUT',

'PATCH',

'DELETE',

'OPTIONS',

]

在上述代码中,我们首先将corsheaders应用程序添加到INSTALLED_APPS中,然后将CorsMiddleware添加到MIDDLEWARE中。接下来,我们设置CORS_ORIGIN_ALLOW_ALLFalse,表示只允许来自白名单中的域名访问。然后,我们设置CORS_ORIGIN_WHITELIST为一个包含允许访问的域名列表。最后,我们设置CORS_ALLOW_METHODS为允许的HTTP方法列表。

3. 使用CORS

配置完成后,我们可以在视图函数或视图类中使用CORS。在下面的示例中,我们将创建一个简单的API视图函数,并使用CORS来允许跨域访问。

Python

from Django.http import JSonResponse

from Django.views.decorators.csrf import csrf_exempt

from Django.views.decorators.http import require_POST

from corsheaders.decorators import cors_headers

@csrf_exempt

@require_POST

@cors_headers(allow_headers='Content-Type')

def api_view(request):

data = {

'message': 'Hello, CORS!'

}

return JSonResponse(data)

在上述代码中,我们使用@cors_headers装饰器将allow_headers参数设置为'Content-Type',以允许跨域请求中的Content-Type头部。我们还使用@csrf_exempt装饰器来禁用CSRF保护,并使用@require_POST装饰器来确保只允许POST请求访问该视图。

4. 测试CORS

配置和使用CORS后,我们可以使用不同域名的浏览器来测试跨域访问。假设我们的Django应用程序运行在http://localhost:8000,我们可以使用以下JavaScript代码在另一个域名上发送POST请求:

Javascript

fetch('http://localhost:8000/api/', {

method: 'POST',

headers: {

'Content-Type': 'application/JSon'

},

body: JSON.stringify({}),

})

.then(response => response.JSon())

.then(data => console.log(data));

上述代码将向http://localhost:8000/api/发送一个POST请求,并打印响应数据到控制台。

通过配置和使用Django CORS库,我们可以轻松地实现跨域资源共享。使用CORS,我们可以控制允许访问我们应用程序的来源,以提高安全性并允许与其他域的资源进行交互。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号