我正在尝试通过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(r'^api-token-auth/$', ObtainAuthToken.as_view())
当我请求身份验证令牌时,我没有得到响应,我得到302状态代码 我用curl请求令牌:
curl -X POST -d "username=admin&password=pass" http://localhost:8000/api-token-auth/
我被重定向了吗?任何帮助将不胜感激,谢谢。
答案 0 :(得分:1)
您是否已从djangos docs检查APPEND_SLASH的值以查看是否正在执行此操作:
https://docs.djangoproject.com/en/dev/ref/settings/#append-slash
默认值:True
如果设置为True,如果请求URL与URLconf中的任何模式都不匹配且它不以斜杠结尾,则会向相同的URL发出HTTP重定向并附加斜杠。 >请注意,重定向可能会导致POST请求中提交的任何数据丢失。
APPEND_SLASH设置仅在安装了CommonMiddleware时使用
要检查的另一件事是您正在使用curl,请尝试以下命令:
curl --data "username=xxx&password=xxx" http://localhost:8000/api/token-auth/
除了文档之外:
http://www.django-rest-framework.org/api-guide/authentication#tokenauthentication
我们可以通过在您的网址模式中添加以下内容来保持一点清洁:
urlpatterns += patterns('',
url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token')
)
它还在该页面上进一步说明:
如果您需要自定义版本的obtain_auth_token视图,可以通过覆盖ObtainAuthToken视图类并在您的url conf中使用它来实现。
你可以通过做这样的事情来做到这一点:
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')
)