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 中注册多个序列化程序