django 中“请求的资源上不存在‘Access-Control-Allow-Origin’标头”

django

1个回答

写回答

fjy17

2025-07-07 19:00

+ 关注

Django
Django

在开发Web应用程序的过程中,经常会遇到跨域资源共享(CORS)的问题。当我们在使用Django框架的时候,有时会出现“请求的资源上不存在‘Access-Control-Allow-Origin’标头”的错误提示。这个错误提示意味着浏览器阻止了跨域请求,因为请求的资源没有添加CORS标头。

什么是CORS?

CORS是一种机制,它允许不同域名下的网页请求访问其他域名下的资源。在浏览器端,当发起一个跨域请求时,浏览器会自动在请求头中添加一个Origin字段,用来指示请求的来源域。服务器端接收到这个请求后,可以根据Origin字段判断是否允许该请求跨域访问。如果服务器端没有正确配置CORS,就会返回一个缺少“Access-Control-Allow-Origin”标头的错误响应。

如何解决“请求的资源上不存在‘Access-Control-Allow-Origin’标头”错误?

要解决这个错误,我们需要在Django应用程序的响应中添加CORS标头。Django提供了一个第三方库Django-cors-headers,可以方便地实现CORS的配置。

安装Django-cors-headers

首先,我们需要使用pip安装Django-cors-headers库。在命令行中执行以下命令:

pip install Django-cors-headers

安装完成后,在Django的settings.py文件中添加以下配置:

Python

INSTALLED_APPS = [

...

'corsheaders',

...

]

MIDDLEWARE = [

...

'corsheaders.middleware.CorsMiddleware',

...

]

CORS_ORIGIN_ALLOW_ALL = True

以上配置将允许所有的跨域请求。如果你想指定特定的域名允许跨域访问,可以将CORS_ORIGIN_ALLOW_ALL设置为False,并添加CORS_ORIGIN_WHITELIST配置项,例如:

Python

CORS_ORIGIN_ALLOW_ALL = False

CORS_ORIGIN_WHITELIST = [

'https://example.com',

'http://localhost:8000',

]

案例代码

让我们来看一个简单的例子,演示如何使用Django-cors-headers解决“请求的资源上不存在‘Access-Control-Allow-Origin’标头”错误。

首先,在views.py文件中添加以下代码:

Python

from Django.http import JSonResponse

def hello(request):

data = {

'message': 'Hello, CORS!'

}

return JSonResponse(data)

然后,在urls.py文件中添加以下代码:

Python

from Django.urls import path

from .views import hello

urlpatterns = [

path('hello/', hello, name='hello'),

]

接下来,启动Django开发服务器,并在浏览器中访问http://localhost:8000/hello/。如果一切正常,你将看到一个包含“Hello, CORS!”消息的JSON响应。

通过使用Django-cors-headers库,我们可以轻松地解决“请求的资源上不存在‘Access-Control-Allow-Origin’标头”错误。只需简单配置一下,即可让Django应用程序支持跨域请求。希望本文对你理解和解决这个问题有所帮助!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号