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

我想修改我的注册表单,使其具有上面字段的名字和姓氏,这样当我注册新用户时,这两列也填充了名字和姓氏。目前我没有额外的注册视图,也没有任何自定义用户模型,我只是使用 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 回答
0
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
于 2019-08-23T10:22:50.547 回答