【问题标题】:How do I disable OPTIONS method on Django Rest Framework globally?如何全局禁用 Django Rest Framework 上的 OPTIONS 方法?
【发布时间】:2016-11-19 00:24:47
【问题描述】:

我想在使用 Django Rest Framework (DRF) 构建的 API 上全局禁用 OPTIONS 方法(在所有 API 端点上)

当前有一个OPTIONS 调用返回,

{
  "parses": [
    "application/json",
    "application/x-www-form-urlencoded",
    "multipart/form-data"
  ],
  "renders": [
    "application/json"
  ],
  "name": "Login Oauth2",
  "description": ""
}

这是我不希望有人窥视的事情。我想返回一个空白字符 ,就像 github 在其 API 或其他东西上所做的那样。

我试过了

@api_view(['POST'])
def my_method(request):
    if request.method == 'OPTIONS':
            return Response()

在基于函数的视图上,它返回 但检查标题显示,

Allow →POST, OPTIONS, OPTIONS

其中有一个重复的OPTIONS

我如何实现它?谢谢。

【问题讨论】:

    标签: python django rest django-rest-framework


    【解决方案1】:

    在您的设置中,添加如下内容:

    REST_FRAMEWORK = {
        'DEFAULT_METADATA_CLASS': None,
    }
    if DEBUG:
        # the default value
        REST_FRAMEWORK['DEFAULT_METADATA_CLASS']: 'rest_framework.metadata.SimpleMetadata'
    

    您也可以实现自己的元数据类。将此设置为 None 将使其在 OPTIONS 请求上返回 HTTP 405。

    【讨论】:

      【解决方案2】:

      只需实现custom permission class

      your_app/permissions.py(您的应用的权限文件)

      from rest_framework import permissions
      
      class DisableOptionsPermission(permissions.BasePermission):
          """
          Global permission to disallow all requests for method OPTIONS.
          """
      
          def has_permission(self, request, view):
              if request.method == 'OPTIONS':
                  return False
              return True
      

      还可以使用 DEFAULT_PERMISSION_CLASSES 设置将此设置为全局默认权限。

      REST_FRAMEWORK = {
          'DEFAULT_PERMISSION_CLASSES': (
              'your_app_name.permissions.DisableOptionsPermission',
          )
      }
      

      这将禁止 OPTIONS 方法的所有传入请求。

      【讨论】:

      • 五年后......刚刚偶然发现了这个问题和您的解决方案。仍然是一个问题,这仍然可以解决它。我想知道为什么这不是默认行为。谢谢。
      猜你喜欢
      • 2014-07-01
      • 2013-07-31
      • 2020-06-11
      • 2018-03-07
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多