django-rest-framework - “type”对象不可使用 Django Rest Framework 和 django oauth2-toolkit 进行迭代

标签 django-rest-framework django-oauth

好吧,我正在尝试在 View 中使用自定义身份验证类为登录用户创建新的访问 token 。

序列化器.py

class UserCreateSerializer(ModelSerializer):            

    def create(self, validated_data):
        user = User.objects.create_user(validated_data['username'], 
            validated_data['email'],
            validated_data['password'])
        return user

    class Meta:
        model = User
        fields = ('username', 'email' ,'password')

View .py

class User_Create_view(CreateAPIView):
    serializer_class = UserCreateSerializer
    queryset = User.objects.all()
    permission_classes = [AllowAny]
    authentication_classes = Has_Access_Token

    def create(self, request):
        serializers =self.serializer_class(data=request.data)
        if serializers.is_valid():
        # pdb.set_trace()
            serializers.save()   
            # Has_Access_Token.access_token(Has_Access_Token())         
            return Response(serializers.data)
        return Response(status=status.HTTP_202_ACCEPTED))

权限.py

class Has_Access_Token(BaseAuthentication):
    def access_token(self):
        app = Application.objects.get(name="testing")
        tok = generate_token()
        pdb.set_trace()
        acce_token=AccessToken.objects.get_or_create(
        user=User.objects.all().last(),
        application=app,
        expires=datetime.datetime.now() + datetime.timedelta(days=365),
        token=tok)
        return acce_token

    @method_decorator(access_token)
    def authenticate(self):
        return request

如果我使用装饰器

文件“/usr/lib/python2.7/functools.py”,第 33 行,位于 update_wrapper 中 setattr(包装,attr,getattr(包装,attr)) AttributeError:“元组”对象没有属性“模块

如果我不使用装饰器 文件“/home/allwin/Desktop/response/env/local/lib/python2.7/site-packages/rest_framework/views.py”,第 262 行,在 get_authenticators 中 返回 [auth() 用于 self.authentication_classes 中的身份验证] 类型错误:“类型”对象不可迭代

我面临的问题是,当我在serializer.save()之后隐式使用Has_Access_Token函数时,会在管理员中针对用户生成访问 token ,但这不是有效的方法,所以我需要重写 View 中的自定义authentication_class。

有人可以建议一些方法来解决这个问题,或者让我知道上面代码的装饰器修正。

提前致谢。

最佳答案

settings.py 文件中设置 REST_FRAMEWORK.DEFAULT_AUTHENTICATION_CLASSES 时,customAuthencationClass 必须如下所示:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [ # need to be list not tuple
        'CustomAuthentication',
    ],
}

关于django-rest-framework - “type”对象不可使用 Django Rest Framework 和 django oauth2-toolkit 进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49788187/

相关文章:

python - 如何允许用户在 Django Rest Framework 中仅修改他的数据

python - 将身份验证请求发送到 OAuth 2.0 Django rest Framework 时获取权限问题

python - 没有数据库的 Django Rest 框架

django - 检索访问 token : b'{\n "error": "redirect_uri_mismatch", 时出错\n "error_description": "Bad Request"\n}'

django-rest-framework - 使用关系在 django-rest-framework 中创建一个 rest api

python - Django-rest-framework 与 django OAuth 2.0 提供身份验证错误

python - Django REST Framework - 从补丁中的 QueryDict 获取参数

javascript - 如何在我的 Django REST api 上调试启用 CORS

python - Django:将数据添加到 JWT 有效负载

django - 在 Django REST Framework 的管理面板中隐藏 token 表