python - 从 Django Rest Framework 中的 token 获取经过身份验证的用户

标签 python django angularjs api django-rest-framework

我是 Django 的新手,我已经设法使用 DRF 构建了一个小型 API。我有我的 angular.js 客户端发布用户身份验证详细信息,DRF 返回一个如下所示的 token :

{ 'token' : '9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b' }

基于 tutorial ,我应该从 request.user 检索详细信息 但我不知道在哪里做这个。我觉得它令人困惑,因为它没有给出一个很好的例子。任何人都知道如何解决它?非常感谢您的意见。

下面是我的 View 和序列化器的代码。

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

最佳答案

请记住,我也是 Angular 和 DRF 的新手...

如果您已经收到 token ,那么在 angularjs 方面,您需要将 token 包含在后续请求的 header 中。可能就像验证请求中的这个缩写代码:

$http({auth request code here}).then(function(response){
  var token = response.headers().token
  $http.defaults.headers.common['Authorization'] = 'Token ' + token;
});

在你的 ViewSet 中你可能想要

authentication_classes = (TokenAuthentication,)

以及任何相关的权限类。

如果您在 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)

关于python - 从 Django Rest Framework 中的 token 获取经过身份验证的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23235544/

相关文章:

python - 在 Python 中使用 YouTube API 获取 YouTube 视频 URL

javascript - 如何使用 get 方法将 ajax 与 graphql 结合使用?

javascript - 有什么方法可以查看使用 Angular UI-Router 的网页的完整源代码?

C++ 中类似 Python 的迭代器习语

python - 如何修复TypeError : an integer is required in python 3. 4、pyserial 2.7虚拟串口

Python 置换程序流程帮助

python - Django 上静态 STATIC_URL 和 STATIC_ROOT 之间的区别

python - 如何在 Django 用户模型中保存时执行代码?

angularjs - 如何在 ion-content 中渲染 svg

javascript - 使用服务在 Controller 之间共享对象