3

ログインと登録のために、django プロジェクトでDjango-rest-auth ( https://github.com/Tivix/django-rest-auth ) を使用しています。次のようなデフォルトの登録フォームが表示されます。

ここに画像の説明を入力

現在、ユーザー名の代わりに電子メールで新しいユーザーを登録できます。MySql データベースのデフォルトの auth_user テーブルには次の列があります: (id、password、last_login、is_superuser、username、first_name、last_name、email、is_staff、is_active、date_joined)

私のsettings.py:

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'rest_framework',
#Rest-auth
'rest_framework.authtoken',
'rest_auth',
#Rest-auth registration
'allauth',
'allauth.account',
'rest_auth.registration',
#Following is added to allow cross domain requests i.e. for serving requests those are coming from frontend app 
'corsheaders',
'flights',
)

新しいユーザーを登録するときに、これらの 2 つの列にも first_name と last_name が入力されるように、登録フォームを変更して、上記のフィールドに名と姓を含めるようにします。現在、登録用の追加ビューもカスタム ユーザー モデルもありません。django-rest-auth によって提供される API エンドポイントを使用しているだけです。

どうすればこれを達成できますか?

4

3 に答える 3

9

rest-auth の RegisterSerializer を拡張することでそれを実現できます

from rest_auth.registration.serializers import RegisterSerializer

class RegistrationSerializer(RegisterSerializer):
    first_name = serializers.CharField(required=True)
    last_name = serializers.CharField(required=True)

    def get_cleaned_data(self):
        return {
            'first_name': self.validated_data.get('first_name', ''),
            'last_name': self.validated_data.get('last_name', ''),
            'username': self.validated_data.get('username', ''),
            'password1': self.validated_data.get('password1', ''),
            'email': self.validated_data.get('email', '')
        }

そしてあなたのsettings.pyにこれを追加してください:

REST_AUTH_REGISTER_SERIALIZERS = {
    'REGISTER_SERIALIZER': 'path.to.your.RegistrationSerializer'
}
于 2016-07-04T21:30:35.593 に答える
1

フィールドを追加する場合は、それらをシリアライザーに追加する必要があります。serializers.py RegisterSerializerで検索し、 そこに first_name と last_name を追加します

first_name = serializers.CharField(required=True, write_only=True)
last_name = serializers.CharField(required=True, write_only=True)

次に、それらをこのシリアライザーのメソッドに追加します。

def get_cleaned_data(self):
    return {
        'first_name': self.validated_data.get('first_name', ''),
        'last_name': self.validated_data.get('last_name', ''),
        'username': self.validated_data.get('username', ''),
        'password1': self.validated_data.get('password1', ''),
        'email': self.validated_data.get('email', '')
    }

これがお役に立てば幸いです。

于 2016-04-24T18:12:55.780 に答える