Riv*_*diz 2 python django rest django-rest-framework
我想OPTIONS
全局(在所有 API 端点上)禁用使用 Django Rest Framework (DRF) 构建的 API 上的方法
目前有OPTIONS
电话返回,
{
"parses": [
"application/json",
"application/x-www-form-urlencoded",
"multipart/form-data"
],
"renders": [
"application/json"
],
"name": "Login Oauth2",
"description": ""
}
Run Code Online (Sandbox Code Playgroud)
这是我不希望有人偷看的东西。我想返回一个空白字符,就像 github 在其 API 或其他东西上所做的那样。
我试过
@api_view(['POST'])
def my_method(request):
if request.method == 'OPTIONS':
return Response()
Run Code Online (Sandbox Code Playgroud)
在基于函数的视图上,它返回一个但检查标题显示,
Allow ?POST, OPTIONS, OPTIONS
Run Code Online (Sandbox Code Playgroud)
其中有一个重复的OPTIONS
.
我如何实现它?谢谢。
小智 7
在您的设置中,添加如下内容:
REST_FRAMEWORK = {
'DEFAULT_METADATA_CLASS': None,
}
if DEBUG:
# the default value
REST_FRAMEWORK['DEFAULT_METADATA_CLASS']: 'rest_framework.metadata.SimpleMetadata'
Run Code Online (Sandbox Code Playgroud)
您也可以实现自己的元数据类。将此设置为 None 将使其在OPTIONS
请求时返回 HTTP 405 。
只需实现一个自定义权限类即可。
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
Run Code Online (Sandbox Code Playgroud)
还可以使用 DEFAULT_PERMISSION_CLASSES 设置将此设置为全局默认权限。
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'your_app_name.permissions.DisableOptionsPermission',
)
}
Run Code Online (Sandbox Code Playgroud)
这将禁止所有对 OPTIONS 方法的传入请求。
归档时间: |
|
查看次数: |
4568 次 |
最近记录: |