无法从django获取数据进行反应

问题描述 投票:0回答:1

所以我正在创建一个登录页面。我已经创建了模型以及视图和端点。登录时,我尝试使用 django 从后端获取数据来验证输入的登录凭据,但出现运行时错误

TypeError: Failed to fetch at HandleSubmit 
我成功注册了我的用户,我已检查数据库以确保该用户存在

我的设置的基本概述。我有一个模型 LoginDetails,它已在 settings.py 中设置为 AUTH_USER_MODEL。

这是我的模型

class LoginDetails(AbstractUser):
    user_data = models.OneToOneField(UserData, on_delete=models.CASCADE, null = True)
    username = models.CharField(max_length=255, unique=True, null=True)
    password = models.CharField(max_length=255, null=True)  # Note: It's recommended to use hashed passwords in production

    USERNAME_FIELD = 'username'
    def __str__(self):
        return self.username

这是我的login.js(仅发布相关信息)

`const handleSubmit = async (event) => {
    event.preventDefault();
      const response = await fetch('http://127.0.0.1:8000/api/login/', {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        credentials: 'include',
        body: JSON.stringify({
            formData
        })
      });

      const content = await response.json();
      setRedirect(true);
        props.setName(content.name);
  };`

以及与我的端点 api/登录关联的视图。

编辑:我在下面的视图中添加了一条打印语句,只是为了看看它是否采用输入的用户名

在运行 django 服务器的 python 终端上,打印用户名时没有得到任何结果。

class LoginView(APIView):
    def post(self, request):
        username = request.data.get('username')
        password = request.data.get('password')
        

        print(username)

        user = LoginDetails.objects.filter(username=username).first()
        if user is None:
            return Response({'error': 'Invalid username'}, status=status.HTTP_401_UNAUTHORIZED)
        if not user.check_password(password):
            return Response({'error': 'Invalid password'}, status=status.HTTP_401_UNAUTHORIZED)
        
        print(user.user_data.role)
        
        payload = {
            'id': user.id,
            'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=60),
            'iat': datetime.datetime.utcnow()
        }
        
        token = jwt.encode(payload, 'secret', algorithm='HS256').decode('utf-8')

        response = Response()

        response.set_cookie(key='jwt', value=token, httponly=True)
        response.data = {
            'jwt': token
        }
        return response

这是我正在使用的序列化器

class LoginDetailsSerializer(serializers.ModelSerializer):
    class Meta:
        model = LoginDetails
        fields = '__all__'
        extra_kwargs = {'password': {'write_only': True}}

        def create(self, validated_data):
            password = validated_data.pop('password', None)
            instance = self.Meta.model(**validated_data)
            if password is not None:
                instance.set_password(password)
            instance.save()
            return instance
reactjs django django-rest-framework django-views django-authentication
1个回答
0
投票

尝试如下。

username = request.POST.get('your_form_field_name','default_value_if_form_value_is_not_present_in_the_form')


#or


username = request.POST.get('your_form_field_name')

default_value_if_form_value_is_not_present_in_the_form
不需要。所以以上两个都是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.