来自 AngularJS 的 Django CORS API

2023-12-28

我已经在 Django 中使用“django-cors”启用了 CORS:

https://github.com/ottoyiu/django-cors-headers https://github.com/ottoyiu/django-cors-headers

按照此处的安装步骤后,我进行了以下设置:

CORS_ORIGIN_ALLOW_ALL = False

CORS_ORIGIN_WHITELIST = (
    'http://localhost:8000'
)

django 应用程序运行于http://locahost:3000 http://locahost:3000

我的前端是一个 Angular 应用程序,它在“http:/localhost:8000”上运行,我做了以下更改来与 django 应用程序进行通信。

RestangularProvider.setBaseUrl('http://localhost:3000/');

[使用 Restangular 获取资源 API]

当我调用 GET API 时,会发生“OPTIONS”飞行前调用,并且出现以下错误:

XMLHttpRequest 无法加载http://localhost:3000/用户 http://localhost:3000/users。凭据标志为“true”,但“Access-Control-Allow-Credentials”标头为“”。它必须是“真实的”才能允许凭证。起源 'http://本地主机:8000 http://localhost:8000' 因此不允许访问。

查看文档,我了解到我需要设置服务器期望作为调用一部分的某些标头。所以,我添加了以下内容: RestangularProvider.setDefaultHeaders({"x-requested-with" : 'XMLHttpRequest'});

但是,在进行此更改时,我收到另一个错误,我无法解决该错误:XMLHttpRequest 无法加载http://localhost:3000/用户 http://localhost:3000/users。预检响应无效(重定向)

注意:请求/响应标头如下:

General:
Remote Address:127.0.0.1:3000
Request URL:http://localhost:3000/users
Request Method:OPTIONS
Status Code:301 MOVED PERMANENTLY

Response Headers
Access-Control-Allow-Headers:x-requested-with, content-type, accept, origin, authorization, x-csrftoken, user-agent, accept-encoding
Access-Control-Allow-Methods:GET, POST, PUT, PATCH, DELETE, OPTIONS
Access-Control-Allow-Origin:http://localhost:8000
Access-Control-Max-Age:86400
Content-Type:text/html; charset=utf-8
Date:Thu, 17 Dec 2015 11:10:16 GMT
Location:http://localhost:3000/users/
Server:WSGIServer/0.1 Python/2.7.10
X-Frame-Options:SAMEORIGIN

Request Headers
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, x-requested-with
Access-Control-Request-Method:GET
Cache-Control:no-cache
Connection:keep-alive
Host:localhost:3000
Origin:http://localhost:8000
Pragma:no-cache
Referer:http://localhost:8000/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36

我终于设法解决了这个问题。该问题是由于 API 命名不当造成的。

我的同事将该 API 命名如下:

url(r'^users/', views.user_details)

当我调用“/users”时,由于 django 的APPEND_SLASH设置,它正在永久重定向到“/users/”。这是 django 文档所说的内容APPEND_SLASH:

当设置为 True 时,如果请求 URL 与 URLconf 中的任何模式都不匹配并且不以斜杠结尾,则会向同一 URL 发出 HTTP 重定向,并附加斜杠。请注意,重定向可能会导致 POST 请求中提交的任何数据丢失。

The APPEND_SLASH仅在以下情况下才使用设置CommonMiddleware已安装。

当然,解决此问题的最简单(也是最好)的方法是通过删除斜杠来更新 API url,即

url(r'^users', views.user_details)

然后它会直接匹配 URL,并且不会发出重定向。

然而,如果有人真的想在 API 中保留尾部斜杠,那么你仍然可以通过在 AngularJS 中添加以下代码来使其工作:

resourceProvider.defaults.stripTrailingSlashes = false;
RestangularProvider.setRequestSuffix('/'); 

然而,不推荐上述内容,但由于它是我的实验结果,所以我无论如何都会分享它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自 AngularJS 的 Django CORS API 的相关文章

随机推荐

  • 在 WiX 3.6 中设置 WebSite 元素的 AppPool

    我有一个 WiX 安装程序 它设置了几个根 IIS 网站 每个网站都有许多 Web 应用程序 我们为每个根都有一个单独的应用程序池 并将每个 Web 应用程序放入该应用程序池中 不幸的是 我找不到一种方法来确保网站进入其所需的应用程序池 而
  • 管理手动 URL 导航上的用户身份验证状态

    我将 Angular2 与 ASP NET Core MVC 结合使用 并且管理手动 URL 导航工作正常 服务器正在使用 Angular2 成功加载我的主页视图 在用户身份验证上 我设置一个会话变量 如下所示 HttpHelper Htt
  • 在VS2005上使用“--layout=system”时Boost链接错误

    我是 boost 新手 我想尝试一下 dll 的一些实际部署场景 因此我使用以下命令来编译 安装库 bjam install layout system variant debug runtime link shared link shar
  • 设置子进程中共享 c_char_p 中字符串的值?

    我有这样的情况 主进程生成一些子进程 它们应该将结果写入字符串和数字类型的共享对象中 对于数字类型没有问题 但对于字符串 值将丢失 import multiprocessing as mp from ctypes import Struct
  • 如何获取项目中所有功能的列表?

    我想以编程方式提取 Google Apps 项目中所有功能的列表 任何服务中似乎都没有一种方法可以轻松提取它们 除非它似乎以某种方式存储在 this 函数中 最好的方法是什么 您想要检索函数列表 您希望使用 Google Apps 脚本来实
  • scipy 成对距离和 X.X+Y.Y - X.Y^t 之间的差异

    假设我们的数据为 d1 np random uniform low 0 high 2 size 3 2 d2 np random uniform low 3 high 5 size 3 2 X np vstack d1 d2 X array
  • “.T”对于 Numpy 数组意味着什么?

    我在 SciPy 文档中看到了这个例子 x y np random multivariate normal mean cov 5000 T 最后的 T 实际上在这里做什么 The T访问属性T对象的 它恰好是一个 NumPy 数组 这T属性
  • 多个新元素的角度交错动画

    我正在尝试在列表中添加交错动画 到目前为止 我已经成功地加载了交错动画 除了加载之外 我还希望在将新项目添加到数组时触发交错动画 我按照这个例子 https medium com google developer experts angul
  • InnoSetup:如何在组件描述中添加换行符

    我正在尝试在组件的描述中间添加换行符 但我似乎找不到合适的语法 Components Name Component A Description This is component A NewLine My component A has t
  • matlab函数sum()的奇怪行为

    知道为什么 Matlab 会这样吗 gt gt sum 0 0 0 Subscript indices must either be real positive integers or logicals gt gt sum 1 1 1 an
  • Xcode Interface Builder - 删除/重命名错误接线的 IBOutlets / IBActions 的“正确”方法?

    我是 Xcode 新手 使用 Swift 工作 所以我不确定我所描述的是否实际上是一个错误 使用界面生成器和助理编辑器时 我可以创建标签 按钮等 并通过按住 Control 键拖动在代码中创建 Outlet 和 Action 只要我是完美的
  • Drools:在数据库中存储规则

    目前 我将所有规则文件存储在文件系统上 它们有很多版本 并在启动时将它们的不同版本加载到内存中 我想更改为将我的 drools 文件存储在数据库中 并且想知道 Drools 是否有任何解决方案或插件可以促进这一点 或者我应该自己制作 Tha
  • 如何在没有 JavaScript 的情况下仅使用内联 CSS 创建工具提示?

    我正在尝试使用内联 CSS 创建悬停工具提示 而不使用 JavaScript 这是我现在的代码 a href hover text span style background color black color white span a
  • 以 JSON 形式提交表单(无 AJAX)

    是否可以在不使用 AJAX 的情况下以 JSON 形式提交表单数据 我尝试更改 enctype
  • Youtube API 返回当前时间

    我正在使用 youtube iframe api 似乎无法在文档或 google 上找到任何引用如何获取当前媒体完成时的返回值的内容 我需要构建一个脚本 可以在其中传递时间变量 其中当变量与当前播放时间匹配时可以触发事件 我知道在嵌入 AP
  • 如何在 R 中导出/导入向量?

    我意识到这是一个非常基本的问题 但我想确保我做得正确 所以我想问只是为了确认 我在一个项目中有一个向量 我希望能够在另一个项目中使用它 我想知道是否有一种简单的方法可以以一种可以轻松将其导入到另一个项目的形式导出该向量 到目前为止 我想出的
  • 从 jquery 通过 AJAX 发送图像数据

    我需要使用 AJAX 将图像数据 data image png base64 从客户端发送到我的 PHP 服务器 我的 AJAX 调用如下所示 表单数据包含图像 ajax url global siteurl save image data
  • 捆绑 git 存储库而不克隆它

    如何捆绑 git 项目而不需要每次都克隆它 现在我总是执行下面的命令 git clone mirror http git project cd git project git bundle create git project lock a
  • selectInput 值未在可反应的 Shiny 中更新(麻烦绑定-unbiding)

    我在 Shiny 的可反应内部有一个 selecInput 但输入没有更新 我想做这样的事情 但可以反应 绑定 取消绑定 DataTable 时出现反应问题 https stackoverflow com questions 3757203
  • 来自 AngularJS 的 Django CORS API

    我已经在 Django 中使用 django cors 启用了 CORS https github com ottoyiu django cors headers https github com ottoyiu django cors h