2016-07-15 91 views
0

我想禁用我的API與Django的REST框架(DRF)內置OPTIONS方法進行了全局(對所有API端點)如何在全球範圍內禁用Django Rest Framework上的OPTIONS方法?

目前的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

我該如何實現它?謝謝。

回答

0

只實施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方法。

1

在你的設置,添加類似:

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

您可以實現自己的元數據類爲好。將此設置爲None將使其返回HTTP 405上的OPTIONS請求。

相關問題