我是Django的新手,我设法使用DRF构建一个小API。我让我的angular.js客户端发布用户身份验证详细信息,DRF返回一个如下所示的令牌:
{ 'token' : '9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b' }
根据tutorial,我应该从request.user
检索详细信息
但我不知道该怎么做。我发现它令人困惑,因为它没有给出一个很好的例子。有没有想过怎么回事的人呢?非常感谢您的意见。
以下是我的视图和序列化程序的代码。
from serializers import ExampleSerializer
from models import Example
from rest_framework import viewsets
class ExampleViewSet(viewsets.ModelViewSet):
"""
Example api description
"""
queryset = Example.objects.all()
serializer_class = ExampleSerializer
串行
from models import Example
from rest_framework import serializers
class ExampleSerializer(serializers.ModelSerializer):
class Meta:
model = Example
fields = ('id', 'field_one', 'field_two', 'created_at', 'updated_at')
depth = 1
答案 0 :(得分:15)
请记住,我也是Angular和DRF的新手......
如果您已经收到令牌,那么在angularjs端,您需要将令牌包含在后续请求的标头中。也许就像验证请求中的这个缩写代码一样:
$http({auth request code here}).then(function(response){
var token = response.headers().token
$http.defaults.headers.common['Authorization'] = 'Token ' + token;
});
在您的ViewSet中,您可能需要
authentication_classes = (TokenAuthentication,)
以及相关的任何permission_classes。
如果您在Angular http请求中包含Token,那么我相信您可以使用request.user引用该用户,就像
一样def list(self, request):
queryset = SomeObject.objects.filter(owner=request.user)
或者,这是另一种用法(用户模型是django.contrib.auth.models.User):
class UserView(RetrieveAPIView):
model = User
serializer_class = UserSerializer
def retrieve(self, request, pk=None):
"""
If provided 'pk' is "me" then return the current user.
"""
if request.user and pk == 'me':
return Response(UserSerializer(request.user).data)
return super(UserView, self).retrieve(request, pk)
答案 1 :(得分:0)
就我而言,我正在尝试使用API REST客户端测试我的API。当我将Header放入配置中时,它可以工作。
Authorization: Token <<token>>