2014-02-25 69 views
3

我正在構建一個公開REST API的Django應用程序,用戶可以通過它來查詢我的應用程序的模型。我按照說明here如何管理訪問Django REST API的權限?

下面你可以看到我用各種用戶名/密碼從命令行打開這個API。 但是,它只適用於如果我使用root用戶和密碼。爲什麼?我該如何改變它?我沒有指定這個API只對root用戶可用的任何地方。我想這是公開的

% curl -H 'Accept: application/json; indent=4' -u root:myRootPassword http://127.0.0.1:3001/api/profiles/60/ 
{ 
    "id": 60, 
    "slug": "my_user", 
    "user": "http://127.0.0.1:3001/api/users/16/" 
} 

% curl -H 'Accept: application/json; indent=4' http://127.0.0.1:3001/api/users/16/ 
{ 
    "detail": "Authentication credentials were not provided." 
} 

% curl -H 'Accept: application/json; indent=4' -u myUser:myPassword http://127.0.0.1:3001/api/profiles/60/ 
{ 
    "detail": "You do not have permission to perform this action." 
} 

% curl -H 'Accept: application/json; indent=4' -u myUser:myPassword http://127.0.0.1:3001/api/profiles/60/ 
{ 
    "detail": "Invalid username/password" 
} 

回答

3

在你APIView,或者你ModelViewSet做

permission_classes = [] 

permission_classes = [rest_framework.permissions.AllowAny] 

這將使publicaly可用於任何一個。這是因爲所有modeviewsets/viewsets /或APIViews從APIView所有inheirit這臺許可類

permission_classes = api_settings.DEFAULT_PERMISSION_CLASSES 

,我在你的情況我猜只有超級用戶。

行剛剛看了看你正在關注的指南。如果你看看你的設置

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), 
    'PAGINATE_BY': 10 
} 

您將默認權限類設置爲只有管理員。所以,你可以做什麼,我剛纔所說,並覆蓋默認的權限,或更改IsAdminUser到

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.AllowAny',), 
    'PAGINATE_BY': 10 
} 

祝你好運,Django的REST的架構是驚人的。