DjangoとDRFの新機能ですが、DRFのシリアライザを使用して、デフォルトのユーザ登録動作を上書きしようとしています。
(ジョセル=ユーザ登録/ログイン/パスワードのためのDRF libには、などをリセット)Django RESTフレームワークシリアライザの出力
私はdjosersを閲覧しました、ユーザーを作成するために、シリアライザを使用する
def perform_create(self, serializer): user = serializer.save()
私の考えは、このメソッドをオーバーライドすることでしたオブジェクト以下を達成するためのシリアライザ:
- 並列
- LOにアカウントオブジェクトを作成し、ユーザー
- を作成私は、シリアライザで、このようなカスタム動作を達成する方法がわからないので、ジンユーザー
- が
つの応答に認証トークンと一緒にアカウントオブジェクトを返す最後のポイントは私に迷惑を与えます。私は入力フィールドを読み取り専用にしていたので、私の応答には含まれていません。 save
メソッドでは、ユーザー+アカウントオブジェクトを作成し、ユーザーにログインしてから(ビューで必要な)ユーザーを返します。
作成したトークン文字列を含むアカウントオブジェクトを1つの応答にシリアル化するにはどうすればよいですか?
これは私のシリアライザ(簡素化し、ストリップいくつかのものから、それは基本的にはこれだけです)
class UserRegistrationSerializer(serializers.Serializer):
email = serializers.EmailField(write_only=True)
# some other fields
password = serializers.CharField(style={'input_type': 'password'},
write_only=True,
validators=settings.get('PASSWORD_VALIDATORS')
)
# this should be the output
account = Account(read_only=True)
def save(self):
user = User(email=self.validated_data['email'])
user.set_password(self.validated_data['password'])
user.save()
account = Account(user=user)
token = #logging in my user
return user
甘い、そのトリックでした!ただし、これは、ユーザーモデルにアカウントモデルとトークンモデルの両方の参照があるためにのみ機能します。将来的には、応答に無関係な完全なユーザーをどのようにシリアル化するのでしょうか? – JimmyVanBraun
@ JimmyVanBraunでは、メソッドフィールドを使用できます。 http://www.django-rest-framework.org/api-guide/fields/#serializermethodfieldをチェックしてください –