2017-02-11 9 views
0

ユーザーに複数のトークンを許可し、トークンモデルを書き直すことにしました。その結果、作成したとして私の設定でDRFトークン認証の書き換え

class TokenAuthentication(rest_framework.authentication.TokenAuthentication): 
    model = Token 

はまたFinalyが

を得たURLで

名前を返すために

class ObtainAuthToken(APIView): 
    authentication_classes =() 
    throttle_classes =() 
    permission_classes =() 
    parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,) 
    renderer_classes = (renderers.JSONRenderer,) 
    serializer_class = AuthTokenSerializer 


    def post(self, request, *args, **kwargs): 
     serializer = self.serializer_class(data=request.data) 
     serializer.is_valid(raise_exception=True) 
     user = serializer.validated_data['user'] 
     name = serializer.validated_data['name'] 
     token, created = Token.objects.get_or_create(user=user, name=name) 
     return Response({'token': token.key}) 


obtain_auth_token = ObtainAuthToken.as_view() 

とAuthTokenSerializerを修正REST_FRAMEWORK

'DEFAULT_AUTHENTICATION_CLASSES': (
    'users.authentication.TokenAuthentication', 
) 
に追加しました
url(r'^token-auth/', obtain_auth_token), 

私はすべてが正しいと思いますが、エラー

File "/home/me/code/python/OCManager/core/users/authentication.py", line 4, in <module> 
    from rest_framework.views import APIView 
ImportError: cannot import name 'APIView' 

ImportError: Could not import 'users.authentication.TokenAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'. ImportError: cannot import name 'APIView'. 

それが何ができるかどれヒントを得続けますか?

トークンクラスの変更はこれです:私が間違っていたものを見つけることができた

class Token(rest_framework.authtoken.models.Token): 
    # key is no longer primary key, but still indexed and unique 
    key = models.CharField(_("Key"), max_length=40, db_index=True, unique=True) 
    # relation to user is a ForeignKey, so each user can have more than one token 
    user = models.ForeignKey(
     settings.AUTH_USER_MODEL, related_name='auth_tokens', 
     on_delete=models.CASCADE, verbose_name=_("User") 
    ) 
    name = models.CharField(_("Name"), max_length=64) 

    class Meta: 
     unique_together = (('user', 'name'),) 

    def __str__(self): 
     return self.user.username + " - " + self.name 

答えて

0

。同じファイルにTokenAuth拡張機能を持つとインポートエラーが発生していたようですが、他のファイルに自身をインポートしようとしているようです。解決策は、別のファイルに

class TokenAuthentication(rest_framework.authentication.TokenAuthentication): 
    model = Token 

を動いていた

関連する問題