Я новичок в DRF, и я хочу создать защищенный ресурс, к которому можно получить доступ только с помощью заголовка Token Auth. Декоратор @authentication_classes
, похоже, не работает. Когда я посылаю запрос GET без токена аутентификации заголовка - $ curl http://127.0.0.1:8000/api/users/customers/2
,Django Rest Framework: невозможно создать защищенный ресурс
я все еще получаю ответ -
{"id":2,"person":{"id":2,"user":{"id":2,"mobile_number":"9999999999"},"first_name":"Yo","last_name":"Yolo","gender":"M"},"email":"[email protected]"}
Что я упускаю?
settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
)
}
urls.py
from rest_framework.authtoken import views as rest_views
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^obtain-auth-token/', rest_views.obtain_auth_token),
url(r'^customers/$', views.register_customer),
url(r'^customers/(?P<pk>[0-9]+)$', views.customer_detail)
]
views.py
@api_view(["GET", "PUT"])
@authentication_classes([authentication.TokenAuthentication])
def customer_detail(request, pk):
try:
customer = Customer.objects.get(pk=pk)
except Customer.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == "GET":
serializer = CustomerSerializer(customer)
return Response(serializer.data)
elif request.method == "PUT":
customer_serializer = CustomerSerializer(customer, data=request.data)
person_serializer = PersonSerializer(customer.person, data=request.data)
person_valid = person_serializer.is_valid()
customer_valid = customer_serializer.is_valid()
if person_valid and customer_valid:
person_serializer.save()
customer_serializer.save()
return Response(request.data)
else:
errors = {}
errors.update(person_serializer._errors)
errors.update(customer_serializer._errors)
return Response(errors, status=status.HTTP_400_BAD_REQUEST)
Документация: http://www.django-rest-framework.org/api-guide/permissions/ –