我想在全局(在所有API端点上)使用Django Rest Framework(DRF)构建的API上禁用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 :(得分:3)
在您的设置中,添加以下内容:
REST_FRAMEWORK = {
'DEFAULT_METADATA_CLASS': None,
}
if DEBUG:
# the default value
REST_FRAMEWORK['DEFAULT_METADATA_CLASS']: 'rest_framework.metadata.SimpleMetadata'
您也可以实现自己的元数据类。将此设置为None将使其在OPTIONS
请求上返回HTTP 405。
答案 1 :(得分:1)
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方法请求。