3

クラスベースの方法でユーザー作成に関してアクセストークンを生成するためにDjango Oauthを実装しようとしています。

serializer.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')

ビュー.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()
            return Response(serializers.data)

許可.py

class Has_Access_Token(BaseAuthentication):
   def access_token(request):
     app = Application.objects.get(name="testing")
     tok = generate_token()

     acce_token=AccessToken.objects.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      

上記の暗黙的な方法を使用している場合、作成されたユーザーに関してアクセストークンが生成されますが、ベストプラクティスではありません。したがって、APIView でカスタム認証クラスを作成するには、デコレーターに関して、または BaseAuthentication クラスを介して何を変更する必要があるかの標準的な手順は何ですか。

デコレータを使用していない場合

  File "/home/allwin/Desktop/response/env/local/lib/python2.7/site-packages/rest_framework/views.py", line 262, in get_authenticators
    return [auth() for auth in self.authentication_classes]
    TypeError: 'type' object is not iterable

デコレータを使用するとき

File "/usr/lib/python2.7/functools.py", line 33, in update_wrapper
    setattr(wrapper, attr, getattr(wrapped, attr))
AttributeError: 'tuple' object has no attribute '__module__'

上記の問題をデバッグするには、デコレータの問題を解決するか、クラス変数を変更しますか?

4

0 に答える 0