我在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',
)
我想修改我的注册表单,使其具有上面字段的名字和姓氏,这样当我注册一个新用户时,这两列也会填充first_name&姓。目前我没有其他注册视图或任何自定义用户模型,我只是使用django-rest-auth提供的API端点。
如何实现这一目标?
答案 0 :(得分:7)
您可以通过扩展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'
}
答案 1 :(得分: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', '')
}
希望这对你有所帮助。
答案 2 :(得分: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