Django rest注册

Django rest注册,django,django-rest-framework,django-allauth,django-rest-auth,Django,Django Rest Framework,Django Allauth,Django Rest Auth,我在Django项目中使用Django rest auth()进行登录和注册。我看到一个默认的注册表,如下所示: 目前,我可以注册一个新用户的电子邮件,而不是用户名。my MySql数据库中的默认auth_user表有以下列:(id、密码、上次登录、is_superuser、用户名、名字、姓氏、电子邮件、is_staff、is_active、加入日期) My settings.py: INSTALLED_APPS = ( 'django.contrib.admin', 'django.cont

我在Django项目中使用Django rest auth()进行登录和注册。我看到一个默认的注册表,如下所示:

目前,我可以注册一个新用户的电子邮件,而不是用户名。my MySql数据库中的默认auth_user表有以下列:(id、密码、上次登录、is_superuser、用户名、名字、姓氏、电子邮件、is_staff、is_active、加入日期)

My 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',
)
我想修改我的注册表单,使其在上面的字段中包含名字和姓氏,这样当我注册一个新用户时,这两列也会填充名字和姓氏。目前,我没有额外的注册视图,也没有任何自定义用户模型,我只是使用django rest auth提供的API端点


如何实现此目的?

如果要添加字段,必须将它们添加到序列化程序中。在serializers.pyRegisterSerializer中查找,并在那里添加名字和姓氏

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', '')
    }

希望这对你有帮助

您可以通过扩展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'
}

我的serializers.py中没有任何RegisterSerializer。我只有自己的与项目相关的序列化程序,这节省了我很多谷歌搜索的时间
from rest_auth.registration.serializers import RegisterSerializer
from rest_framework import serializers    

class MyRegisterSerializer(RegisterSerializer):
    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', ''),
        'password1': self.validated_data.get('password1', ''),
        'email': self.validated_data.get('email', ''),
    }

def save(self, request):
    adapter = get_adapter()
    user = adapter.new_user(request)
    self.cleaned_data = self.get_cleaned_data()
    adapter.save_user(request, user, self)
    setup_user_email(request, user, [])
    user.save()
    return user