2017-11-05 13 views
0

私はDjango(もちろんDjango Rest Framework)を使用するアプリケーションを構築しており、Token Based Authenticationを使いたいと思います。私は実行時に私のモデルとユーザーを関連付ける方法について100%明確ではありません。ユーザーとモデルの関連付けを処理する方法は?

ので、I'll receive a POST request in my View

if request.method == 'POST': 
    .... 
    serializer.save() 

そして、the flow will go to the post save receiver

@receiver(post_save, sender=settings.AUTH_USER_MODEL) 
def create_auth_token(sender, instance=None, created=False, **kwargs): 
if created: 
    Token.objects.create(user=instance) 

私は私のモデルでは、私は、ユーザーへの参照をする必要がありますと仮定します。しかし、どのようにしてビュー内に新しいユーザーまたは既存のユーザーを取得できますか? 私はこれが私のモデルになるとします

class UserPostData: 
    some_info = models.DateField() 
    user = models.OneToOneField(User) 

しかし、どのように私はちょうどビューに保存されたモデルとユーザーを関連付ける扱うのですか?

if request.method == 'POST': 
    # get_or_create_user()? But there's no username. It's token based auth 
    serializer.save() 

答えて

1

要求が認証されている場合、要求からユーザーオブジェクトを抽出できます。 たとえば、あなたがあなたのシリアライザの方法createを上書きすることができますし、次のように、コンテキストからの要求を取る:

class UserPostDataSerializer(ModelSerializer): 
    ... 
    def create(self, validated_data): 
     user = self.context['request'].user 
     new_model = UserPostData.objects.create(user=user, 
               **validated_data) 
     new_model.save() 
     return new_model 
    ... 
+0

よし。ありがとう。 'TokenAuthenticationが正常に認証された場合、TokenAuthenticationは以下の認証情報を提供します:request.userはDjango Userインスタンスになります。 'しかし、要求が正常に認証されなかったらどうなるでしょうか?次に、フローは '@receiver(post_save、sender = settings.AUTH_USER_MODEL)'に行きますか? –

+0

私は確かに分かりませんが、クライアントが正しい認証資格情報を提供する場合にのみ認証トークンを作成すると仮定します。それ以外の場合はそれほど意味がありません。 – prokher

+0

この設定にはパスワードはありません。トークンベースです。 –

関連する問題