DRF:如何使用密码保护DefaultRouter

时间:2018-04-11 10:32:56

标签: python django django-rest-framework

您将如何保护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)),

2 个答案:

答案 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)

<强>参考

DefaultRouter

  

此路由器与上面的SimpleRouter类似,但另外   包括一个默认的API根视图,它返回一个包含的响应   超链接到所有列表视图。它还会生成路由   可选的.json样式格式后缀。