我正在使用Django Rest Framework开发API。我试图列出或创建“订单”对象,但是当我尝试访问控制台时,出现此错误:
{"detail": "Authentication credentials were not provided."}
观看次数:
from django.shortcuts import render from rest_framework import viewsets from django.contrib.auth.models import User from rest_framework.renderers import JSONRenderer, YAMLRenderer from rest_framework.response import Response from rest_framework.views import APIView from order.models import * from API.serializers import * from rest_framework.permissions import IsAuthenticated class OrderViewSet(viewsets.ModelViewSet): model = Order serializer_class = OrderSerializer permission_classes = (IsAuthenticated,)
序列化器:
class OrderSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Order fields = ('field1', 'field2')
我的网址:
# -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url from django.conf import settings from django.contrib import admin from django.utils.functional import curry from django.views.defaults import * from rest_framework import routers from API.views import * admin.autodiscover() handler500 = "web.views.server_error" handler404 = "web.views.page_not_found_error" router = routers.DefaultRouter() router.register(r'orders', OrdersViewSet) urlpatterns = patterns('', url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token'), url(r'^api/', include(router.urls)), )
然后我在控制台中使用以下命令:
curl -X GET http://127.0.0.1:8000/api/orders/ -H 'Authorization: Token 12383dcb52d627eabd39e7e88501e96a2sadc55'
错误说:
通过在我的settings.py中添加“ DEFAULT_AUTHENTICATION_CLASSES”来解决
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.TokenAuthentication', ), 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAdminUser' ), }
如果你使用mod_wsgi在Apache上运行Django,则必须添加
WSGIPassAuthorization On
在你的httpd.conf中。否则,授权标头将被mod_wsgi剥离。