【问题标题】:how to make thunk HTTP POST request to Django rest api如何向 Django rest api 发出 thunk HTTP POST 请求
【发布时间】:2021-10-05 04:33:18
【问题描述】:

我对此很陌生,所以我会先向您展示错误,然后再展示我的思考过程。

我正在尝试使用 thunk(redux 中的 Http 请求)向我在 django 中的个人 rest api 发出 post 请求。 (因此它可以运行 cURL 命令并使用授权代码来获取访问令牌并从 API 获取用户数据) 当我发出此请求时,网络返回 201 状态以保持其正常工作,而我的控制台将调度记录为已拒绝,并给出错误“消息:“JSON 输入意外结束”。在此消息中,有效负载未定义,我的有效载荷位于 arg 下的 meta 中。

经过大量研究,看起来我要么需要在前端 JSON.strigify 一些东西,要么 django 正在接收一个空对象并且不知道如何处理它。我相信是后者,不知道如何进行。这是我的代码:

前端: 切片.py

    import {createAsyncThunk} from '@reduxjs/toolkit'
        
    export const postRequest= createAsyncThunk('slice/postRequest',
          async postData => {
            const response=
            await client.post('url', {slice:postData})
            return response.slice
          }
        )

组件.py

  import {useDispatch} from 'react-redux'
  import {postRequest} from './slice'

  const Component = () => {
      const dispatch=useDispatch()
      const authCode= 'samplecode'
      const data={authCode:`${authCode}`, userData:{}}
      dispatch(postRequest(JSON.stringify(data))

     return(null)
 }

export default Component

后端:

模型.py 从 django.db 导入模型

    class UserData(models.Model):
      authCode=models.CharField(max_length=100, default='')
      userData= models.JSONField

序列化器.py

from rest_framework import serializers
from .models import *

class UserDataSerializer(serializers.ModelSerializer):
  class meta:
    model=UserData
    fields= ('authCode', 'userData')

views.py

from .models import *
from .serializers import *
from django.views.decorators.csrf import csrf_excempt
from rest_framework.decorators import api.view
from rest_framework.resposne import Response
from rest_framework import status

@api_view(['POST'])
@csrf_excempt
define restapi(request)
  if request.method == "POST":
    serializer = UserDataSerializer(data = request.data
    if serializer.is_valid():
      serializer.save
      return Response(status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_Request

我也尝试过它会返回 204 的状态,并且没有 JSON.stringify。 我注意到,当我向 json 服务器发出成功的 post 请求时,它会使用 args 中的有效负载发出请求,如果成功,有效负载将移动到有效负载,但我猜测我当前的错误正在发生因为在 thunk 调度开始时有效负载是空白的。不过我真的不确定

【问题讨论】:

    标签: django ajax django-rest-framework backend thunk


    【解决方案1】:

    我解决了这个问题,太愚蠢了。

    我使用的是自制客户端,但我没有足够的经验来做到这一点。我刚拿到 axios 并将其用作客户端,它运行良好。我还将组件中的请求简化为没有 JSON.stringify 并且没有反引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 2021-11-28
      • 2017-05-05
      • 2018-07-19
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多