Django 302尝试从rest框架检索令牌时的状态代码

Django 302尝试从rest框架检索令牌时的状态代码,django,curl,django-rest-framework,Django,Curl,Django Rest Framework,我正在尝试通过django rest框架检索令牌 我的api.views.py如下所示 from rest_framework.views import APIView from rest_framework import status from rest_framework import parsers from rest_framework import renderers from rest_framework.response import Response from rest_fram

我正在尝试通过django rest框架检索令牌 我的api.views.py如下所示

from rest_framework.views import APIView
from rest_framework import status
from rest_framework import parsers
from rest_framework import renderers
from rest_framework.response import Response
from rest_framework.authtoken.models import Token
from rest_framework.authtoken.serializers import AuthTokenSerializer


class ObtainAuthToken(APIView):
    throttle_classes = ()
    permission_classes = ()
    parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
    renderer_classes = (renderers.JSONRenderer,)
    serializer_class = AuthTokenSerializer
    model = Token

    def post(self, request):
        serializer = self.serializer_class(data=request.DATA)
        if serializer.is_valid():
            token, created = Token.objects.get_or_create(user=serializer.object['user'])
            return Response({'token': token.key})
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
我的url看起来像:

url(r'^api-token-auth/$', ObtainAuthToken.as_view())
当我请求auth令牌时,我没有得到响应,而是得到了302状态码 我正在请求带有curl的令牌:

curl -X POST -d "username=admin&password=pass" http://localhost:8000/api-token-auth/

我被重定向了吗?非常感谢您的帮助。

您是否已从djangos文档中检查了APPEND\u SLASH的值以查看是否正确:

默认值:True

设置为True时,如果请求URL与URLconf中的任何模式都不匹配,并且没有以斜杠结尾,则会向同一URL发出HTTP重定向,并附加斜杠。>请注意,重定向可能会导致POST请求中提交的任何数据丢失

仅当安装了CommonMiddleware时,才使用APPEND_斜杠设置

要检查的另一件事是,您是否按照预期使用了curl,请尝试以下命令:

curl --data "username=xxx&password=xxx" http://localhost:8000/api/token-auth/
除文件外,还有:

通过在url模式中添加以下内容,我们可以让事情变得更干净:

urlpatterns += patterns('',
    url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token')
)
它还进一步指出:

如果需要自定义版本的“获取授权令牌”视图,可以通过重写“获取授权令牌”视图类并在url配置中使用该类来实现

你可以这样做:

from rest_framework.authtoken.views import ObtainAuthToken

class ModifiedObtainAuthToken(ObtainAuthToken):
    pass

modified_obtain_auth_token = ModifiedObtainAuthToken.as_view()
然后添加如下内容:

urlpatterns += patterns('',
    url(r'^api-token-auth/', 'yourapp.views.modified_obtain_auth_token')
)

该答复的内容是什么?rest框架似乎不太可能返回302。我没有返回任何东西,我得到的只是终端中的
myhostname$
,它说:
05/Feb/2014 12:47:25]“POST/api-token-auth/HTTP/1.1”302 0
我很喜欢这个答案的后一部分,它帮助我清理了我的代码,我给了你一张赞成票。不幸的是,APPEND_斜杠设置和修改的curl请求没有返回任何数据。