Django rest регистрация

Я использую Django-rest-auth (https://github.com/Tivix/django-rest-auth) в моем проекте django для входа и регистрации. Я вижу следующую форму регистрации по умолчанию:

введите здесь описание изображения

В настоящее время я могу зарегистрировать нового пользователя с адресом электронной почты вместо имени пользователя. Таблица auth_user по умолчанию в моей базе данных MySql имеет следующие столбцы: (id, пароль, 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',
)

Я хочу изменить свою регистрационную форму так, чтобы имя и фамилия были указаны с указанными выше полями, чтобы при регистрации нового пользователя эти два столбца также заполнялись first_name и last_name. В настоящее время у меня нет дополнительного представления для регистрации или какой-либо пользовательской модели, я просто использую конечные точки API, предоставляемые django-rest-auth.

Как мне этого добиться?


person Thinker    schedule 24.04.2016    source источник


Ответы (2)


Вы можете добиться этого, расширив RegisterSerializer rest-auth

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'
}
person Eduardo Cardoso    schedule 04.07.2016
comment
Это избавило меня от необходимости гуглить - person niklas; 10.11.2016

если вы хотите добавить поле, вы должны добавить их в сериализатор. Найдите в 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', '')
    }

Надеюсь, это поможет вам.

person Andrii Kovalev    schedule 24.04.2016
comment
У меня нет RegisterSerializer в моем serializers.py. У меня есть только сериализаторы, связанные с моим собственным проектом. - person Thinker; 25.04.2016