注册时,错误信息无法返回,没法查看具体错误信息

来源:7-14 vue和注册功能联调

mahsiaoko

2019-10-11


这是返回的信息,

http://img.mukewang.com/szimg/5d9ff796091b263610400135.jpg

这是前端的代码

isRegister () {
      var that = this
      register({
        password: that.password,
        pwd2: that.rePassword,
        username: that.userName,
        name: that.name,
        email: that.email,
        mobile: that.phone,
        desc: that.desc
      }).then((response) => {
        console.log(response.data)
        // 假如以下三行不注释掉,则会注册完成之后自动登录
        cookie.setCookie('name', response.data.username, 7)
        cookie.setCookie('token', response.data.token, 7)
        that.$store.dispatch('setInfo')
        this.$router.push({ name: 'SignIn' })
      }).catch(function (error) {
        console.log(error)
      })
    }

后端代码是:

serializers.py

class RegSerializers(serializers.ModelSerializer):
    pwd2 = serializers.CharField(
        help_text="重复密码",
        label="重复密码",
        required=True,
        style={'input_type': 'password'},
        max_length=20,
        min_length=6,
        allow_blank=False,
        error_messages={
            "blank": "请再次输入密码",
            "required": "请再次输入密码",
            "min_length": "请确保密码长度不小于6",
            "max_length": "请确保密码长度不大于20"
        },
        write_only=True)
    password = serializers.CharField(
        help_text="输入密码",
        label="输入密码",
        style={'input_type': 'password'},
        max_length=20,
        min_length=6,
        write_only=True,
        allow_blank=False,
        error_messages={
            "blank": "请输入密码",
            "required": "请输入密码",
            "min_length": "请确保密码长度不小于6",
            "max_length": "请确保密码长度不大于20"
        })
    username = serializers.CharField(
        label="用户名",
        help_text="用户名",
        required=True,
        allow_blank=False,
        error_messages={
            'blank': '请输入用户名',
            'required': "请输入用户名"
        },
        validators=[
            UniqueValidator(queryset=User.objects.all(), message="用户已经存在")
        ])
    name = serializers.CharField(
        label="姓名",
        help_text="姓名",
        required=True,
        error_messages={
            'blank': '请输入姓名',
            'required': "请输入姓名"
        },
        allow_blank=False,
    )
    mobile = serializers.CharField(
        label="手机",
        help_text="手机",
        required=True,
        error_messages={
            'required': "请输入手机号",
            'blank': '请输入手机号'
        },
        allow_blank=False,
    )

    def validate(self, attrs):
        # 校验两次输入的密码是否正确
        password = attrs['password']
        pwd2 = attrs['pwd2']
        mobile = attrs['mobile']
        if not re.match(REGEX_MOBILE, mobile):
            raise serializers.ValidationError({'mobile': "手机号码非法"})
        if password != pwd2:
            raise serializers.ValidationError({'password_error': '两次输入的密码不一样'})
        del attrs['pwd2']
        return attrs

    class Meta:
        model = User
        fields = ('username', 'password', 'pwd2', 'name', 'mobile', 'email',
                  'desc')

views.py里面是:

class RegList(CreateModelMixin, viewsets.GenericViewSet):
    queryset = User.objects.all()
    serializer_class = RegSerializers

    
    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = self.perform_create(serializer)
        # 生成jwt的token
        re_dict = serializer.data
        payload = jwt_payload_handler(user)
        re_dict['token'] = jwt_encode_handler(payload)
        re_dict['name'] = user.name if user.name else user.username
        headers = self.get_success_headers(serializer.data)
        return Response(re_dict, status=status.HTTP_201_CREATED, headers=headers)

    def perform_create(self, serializer):
        return serializer.save()

密码加密我使用的是信号的方式



我现在想取得错误的具体信息,但是按照老师的代码返回不了,用课程的代码测试时,发现课程的代码是可以实现的。

写回答

1回答

mahsiaoko

提问者

2019-10-12

老师,我这个问题解决了,在前端,返回

.catch(function (error) {
        console.log(error.response)})

这个地方用 error.response就可以获得返回的所有错误信息,但是我不理解为什么直接打印error不会返回这些呢?

error.response返回情况:

//img1.sycdn.imooc.com/szimg/5da156a709bd723e07270543.jpg

0
4
mahsiaoko
回复
bobby
82959620
2019-10-14
共4条回复

Python前后端分离开发Vue+Django REST framework实战

Django REST framework课程视频,RESTFul API前后端分离开发

2906 学习 · 2491 问题

查看课程