虽然这个问题的公认答案确实回答了措辞上的问题,但我认为它不能解决眼前的实际问题。
为了完整起见,禁用可浏览HTML api的方法是将其从渲染器类中删除,如下所示:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
但是,问题所隐含的实际问题是人们无需身份验证就能发布到API。尽管删除该表单使其不那么明显,但此答案不能保护API端点。
至少,有人会发现此问题,并希望保护API免遭未经身份验证或未经授权的POST提交;他们正在寻求更改API权限
除非用户通过身份验证,否则以下内容将所有端点设置为只读。
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
)
}
如果您想完全隐藏API,除非用户已登录,也可以使用IsAuthenticated
。
仅供参考:由于该表单会响应权限,因此也会从HTML可浏览API中删除该表单。经过身份验证的用户登录后,该表单将再次可用。
奖励回合:
仅在dev中启用可浏览的HTML API:
DEFAULT_RENDERER_CLASSES = (
'rest_framework.renderers.JSONRenderer',
)
if DEBUG:
DEFAULT_RENDERER_CLASSES = DEFAULT_RENDERER_CLASSES + (
'rest_framework.renderers.BrowsableAPIRenderer',
)
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
),
'DEFAULT_RENDERER_CLASSES': DEFAULT_RENDERER_CLASSES
}