Che*_*lix 19 python api django angularjs django-rest-framework
我是Django的新手,我已经设法使用DRF构建一个小API.我让我的angular.js客户端发布用户身份验证详细信息,DRF返回一个如下所示的令牌:
{ 'token' : '9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b' }
根据教程,我应该从中检索细节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
小智 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)
| 归档时间: | 
 | 
| 查看次数: | 14532 次 | 
| 最近记录: |