Django REST:OPTIONS 请求注册为 PUT

Posted

技术标签:

【中文标题】Django REST:OPTIONS 请求注册为 PUT【英文标题】:Django REST: OPTIONS request is registered as PUT 【发布时间】:2019-07-11 04:51:30 【问题描述】:

每当浏览器发送一个 OPTIONS 请求时,Django REST 将其注册为一个 PUT 请求。

当我注意到它时,我正在编写我的权限代码。我使用传递给def has_object_permission( self, request, view, obj ): 的默认请求参数。

使用request.method 将为除OPTIONS 之外的每个请求返回正确的请求方法。 但是,当我在项目的不同部分的 get_permission( self, request, view ): 函数中使用 request.method 时,会返回正确的响应。 has_object_permission() 函数会不会有问题?

目前我只检查请求是否为 PUT,因为我相信 Django 无论如何都不会使用 PUT 请求。但是如果我可以使用实际名称来代替,那就太好了。

我的 Django REST 版本是3.9.0

【问题讨论】:

【参考方案1】:

OPTIONS 请求通常用于跨域资源共享 (CORS) 中所谓的“飞行​​前”请求。 has_object_permission() 没有任何问题,只是这些飞行前请求可能不打算由您的视图处理。在这个 SO 帖子中有更详细的答案:https://***.com/a/29954326/784648

【讨论】:

我了解什么是 OPTIONS,并且我已经有了处理 CORS 的中间件。但是 Django 仍然处理它们并返回有关该端点的一些数据。这还不错,但令人讨厌的是 OPTIONS 触发了has_object_permisssion() 方法,我在其中检查身份验证。如果请求是 OPTIONS 有没有办法阻止 GenericAPIView 检查对象权限?

以上是关于Django REST:OPTIONS 请求注册为 PUT的主要内容,如果未能解决你的问题,请参考以下文章

Django Rest Framework 请求对 AllowAny 设置进行身份验证

CORS 因请求而失败,带有 OPTIONS(状态为 0 的响应)

是否可以在 Django Rest Framework 中的 ajax 请求期间追溯 403 错误?

Django Rest Framework:在 ViewSet 中注册多个序列化程序

如何使用 Django oAuth 工具包从 Django Rest Framework 获取请求的应用程序详细信息

注册过程中dJango rest api中的ConnectionRefusedError