2015-08-05 3 views
0

Я хочу получить доступ к api без какой-либо аутентификации или разрешения в рамках django rest. Чтобы достичь этого, когда у меня появляется следующая настройка, я заканчиваю ошибку.django rest framework no authentication no permission

Окружение:

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES':(), 
    'DEFAULT_AUTHENTICATION_CLASSES':(), 
    'PAGE_SIZE': 10 
} 

Ошибка:

TypeError at /endpoints/ 

'many' is an invalid keyword argument for this function 

Request Method:  GET 
Request URL: http://localhost:9900/endponint/?format=api 
Django Version:  1.8.3 
Exception Type:  TypeError 
Exception Value:  

'many' is an invalid keyword argument for this function 

Exception Location:  /home/user/.virtualenvs/test/lib/python3.4/site-packages/django/db/models/base.py in __init__, line 480 
Python Executable: /home/user/.virtualenvs/test/bin/python 
Python Version:  3.4.0 
Python Path:  

['/home/user/Projects/test/new', 
'/home/user/.virtualenvs/test/lib/python3.4', 
'/home/user/.virtualenvs/test/lib/python3.4/plat-x86_64-linux-gnu', 
'/home/user/.virtualenvs/test/lib/python3.4/lib-dynload', 
'/usr/lib/python3.4', 
'/usr/lib/python3.4/plat-x86_64-linux-gnu', 
'/home/user/.virtualenvs/test/lib/python3.4/site-packages'] 

Server time: Wed, 5 Aug 2015 13:46:35 +0000 

Endpoint: 


Request Method: GET 
Request URL: http://localhost:9900/endpoint/?format=api 

Django Version: 1.8.3 
Python Version: 3.4.0 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'rest_framework', 
'app') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware') 


Traceback: 
File "/home/user/.virtualenvs/test/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/home/user/.virtualenvs/test/lib/python3.4/site-packages/django/views/decorators/csrf.py" in wrapped_view 
    58.   return view_func(*args, **kwargs) 
File "/home/user/.virtualenvs/test/lib/python3.4/site-packages/rest_framework/viewsets.py" in view 
    85.    return self.dispatch(request, *args, **kwargs) 
File "/home/user/.virtualenvs/test/lib/python3.4/site-packages/rest_framework/views.py" in dispatch 
    456.    response = self.handle_exception(exc) 
File "/home/user/.virtualenvs/test/lib/python3.4/site-packages/rest_framework/views.py" in dispatch 
    453.    response = handler(request, *args, **kwargs) 
File "/home/user/.virtualenvs/test/lib/python3.4/site-packages/rest_framework/mixins.py" in list 
    43.    serializer = self.get_serializer(page, many=True) 
File "/home/user/.virtualenvs/test/lib/python3.4/site-packages/rest_framework/generics.py" in get_serializer 
    109.   return serializer_class(*args, **kwargs) 
File "/home/user/.virtualenvs/test/lib/python3.4/site-packages/django/db/models/base.py" in __init__ 
    480.     raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0]) 

Exception Type: TypeError at /endpoints/ 
Exception Value: 'many' is an invalid keyword argument for this function 

Но когда я использую следующие настройки он работает, но просят ввести учетные данные аутентификации.

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

Пожалуйста, дайте мне знать, как получить доступ к apis доступа без каких-либо полномочий.

Я бег с Джанго 1.8 djangorestframework 3,1

+0

Нужно видеть свой вид кода для '/ environment /'. –

ответ

3

Вы можете использовать следующие параметры для DJR:

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.AllowAny',), 
    'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.SessionAuthentication',), 
} 

AllowAny разрешения на самом деле не нужно, но я думаю, что это хорошая практика, чтобы явно определить это поведение в конфигурации.

+0

Это не работает, бросая Type Error, «context» является недопустимым аргументом ключевого слова для этой функции. –

+0

Хмм, я проверил эту конфигурацию с кодом из учебника DRF, и он отлично работает с аутентифицированными и не прошедшими проверку пользователями, предоставляя всю информацию в «запросе» "объект. – oxyum

+0

Да, это работает. Извиняется, в моем коде была проблема. –

1

В классах разрешений вы можете использовать разрешение AllowAny и оставить классы проверки подлинности пустыми в настройках DRF.

Выполнение этого разрешает неограниченный доступ к API без каких-либо схем аутентификации.

Согласно DRF документации на AllowAny классе разрешение:

The AllowAny permission class will allow unrestricted access, regardless of if the request was authenticated or unauthenticated.

REST_FRAMEWORK = { 
    ...  
    'DEFAULT_AUTHENTICATION_CLASSES':(), # no authentication classes 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.AllowAny', # will allow unrestricted access 
    ), 
} 
2

эта ошибка может произойти при использовании класса модели на ваш взгляд, при определении «serializer_class» атрибут

+0

Спасибо, это было именно то, что я сделал. – graup