Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Django Rest框架中的令牌获取经过身份验证的用户_Python_Django_Angularjs_Api_Django Rest Framework - Fatal编程技术网

Python 从Django Rest框架中的令牌获取经过身份验证的用户

Python 从Django Rest框架中的令牌获取经过身份验证的用户,python,django,angularjs,api,django-rest-framework,Python,Django,Angularjs,Api,Django Rest Framework,我是Django的新手,我已经设法使用DRF构建了一个小型API。我让angular.js客户端发布用户身份验证详细信息,DRF返回一个令牌,如下所示: { 'token' : '9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b' } 基于,我应该从request.user 但我不知道该在哪里做。我觉得它令人困惑,因为它没有给出一个好的例子。有人知道怎么绕过它吗?非常感谢您的意见 下面是我的视图和序列化程序的代码 from serializers import

我是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

请记住,我也是新的角度和DRF

如果您已经收到令牌,那么在angularjs端,您需要将令牌包含在后续请求的头中。可能与身份验证请求中的缩写代码类似:

$http({auth request code here}).then(function(response){
  var token = response.headers().token
  $http.defaults.headers.common['Authorization'] = 'Token ' + token;
});
在视图集中,您可能需要

authentication_classes = (TokenAuthentication,)
以及与之相关的任何权限

如果您在Angular http请求中包含令牌,那么我相信您可以使用request.user引用用户,比如

def list(self, request):
    queryset = SomeObject.objects.filter(owner=request.user)
或者,这里还有另一个用途(用户模型是django.contrib.auth.models.User):


在我的例子中,我试图用API REST客户端测试我的API。当我将头放入配置中时,它就工作了

Authorization: Token <<token>>
授权:令牌

查看-它包括身份验证。Drf-seed不提供身份验证用户的用户名等详细信息,只提供获取更多资源的令牌。请查看。我想使用此令牌返回用户详细信息。我已尝试四处查看,并已确定这可能是最佳选择。它对我有用。谢谢。我用它解决了一个类似的问题,但建议重写get_serializer_类来选择合适的序列化程序,而不是直接从retrieve调用Respond,设置pk,如:self.kwargs[“pk”]=request.user.pk pk=request.user.pk这样您就可以尽可能少地更改默认行为。那么您是说我必须在每个请求中发送“user”吗?我认为它应该是这样工作的:如果用户点击一个用户信息“GET”方法调用,并且在头中包含令牌,那么应该根据当前令牌承载(应该知道哪个用户拥有这个令牌)为它们提供详细信息
Authorization: Token <<token>>