【发布时间】: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