您将如何保护DefaultRouter()
,以便用户无法查看API Root,除非他们已登录?
class OrderViewSet(viewsets.ReadOnlyModelViewSet):
permission_classes = (permissions.IsAuthenticated)
queryset = Order.objects.all()
serializer_class = OrderSerializer
router = routers.DefaultRouter()
router.register(r'orders', views.OrderViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^auth/', include('rest_framework.urls')),
]
project.urls.py
# API
url(r'^api/', include(api_urls)),
答案 0 :(得分:1)
您可以在settings.py文件中添加默认权限类:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
答案 1 :(得分:0)
将DefaultRouter()
更改为SimpleRouter()
会从DRF中删除API root view
。
但是,如果您尝试访问端点127.0.0.1:8000/api/
,您将获得Http 404 Page not found
而不是API root view
所以最后的urls.py
是这样的:
router = SimpleRouter()
router.register(r'orders', views.OrderViewSet)
<强>参考强>
此路由器与上面的SimpleRouter类似,但另外 包括一个默认的API根视图,它返回一个包含的响应 超链接到所有列表视图。它还会生成路由 可选的.json样式格式后缀。