1、注册接口:/users/register/
1.1还是users的model模块,
1.2序列化,在users下进行创建
class UserRegisterSerializer(serializers.ModelSerializer):
password_confirm = serializers.CharField(
label='确认密码',help_text='确认密码',min_length=6,max_length=20,
error_messages={
"min_length":'仅6-20字符',
"max_length":"仅6-20字符"
},write_only=True
)
class Meta:
model = User
fields = ["id", "username", "password", "password_confirm", 'email', "mobile"]
extra_kwargs = {
'username': {
'label': '用户名',
'help_text': '用户名',
'min_length': 6,
'max_length': 20,
'error_messages': {
'min_length': '仅允许6-20个字符的用户名',
'max_length': '仅允许6-20个字符的用户名',
},
},
'password': {
'label': '密码',
'help_text': '密码',
'min_length': 6,
'max_length': 20,
'write_only': True,
'error_messages': {
'min_length': '仅允许6-20个字符的密码',
'max_length': '仅允许6-20个字符的密码',
},
},
'email': {
'label': '邮箱',
'help_text': '邮箱',
'required': True,
'allow_blank': True,
'validators':[UniqueValidator(queryset=User.objects.all(),message='此邮箱已注册')]
}
}
def validate_password_confirm(self, value):
if value != self.initial_data['password']:
raise serializers.ValidationError('两次密码不一样')
return value
# .validationError
# 方法同上
# def validate(self, attrs):
# if attrs['password'] != attrs['password_confirm']:
# raise serializers.ValidationError('两次密码不一样')
# return attrs
def create(self, validated_data):
validated_data.pop('password_confirm')
# 注意调用create_user方法来创建用户,会对密码进行加密
# 如果是create方法的话,会没有密码加密
# #原来的模型中没有这个字段不进行删除pop的话,会报错
return User.objects.create_user(**validated_data)
1.3进行试图
class UserRegisterView(generics.CreateAPIView):
serializer_class = UserRegisterSerializer
1.4添加urls
path(‘users/register/’, views.UserRegisterView.as_view(), name=‘register’),
1.5运行代码。(问题已经解决)
最后进行注册接口调试即可。