django - 如何向 Django rest api 发出 thunk HTTP POST 请求
问题描述
我对此很陌生,所以我会先向您展示错误,然后再展示我的思考过程。
我正在尝试使用 thunk(redux 中的 Http 请求)向我在 django 中的个人 rest api 发出 post 请求。(因此它可以运行 cURL 命令并使用授权代码来获取访问令牌并从 API 获取用户数据)当我发出此请求时,网络返回 201 状态以保持其正常工作,而我的控制台将调度记录为被拒绝,并给出错误“消息:“JSON 输入意外结束”。在此消息中,有效负载未定义,我的有效负载位于 arg 下的元中。
经过大量研究,看起来我要么需要在前端 JSON.strigify 一些东西,要么 django 正在接收一个空对象并且不知道如何处理它。我相信是后者,不知道如何进行。这是我的代码:
前端:slice.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
后端:
models.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')
视图.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 调度开始时有效负载是空白的。真的我不确定
解决方案
我解决了这个问题,这很愚蠢。
我使用的是自制客户端,但我没有足够的经验来做到这一点。我刚拿到 axios 并将其用作客户端,它运行良好。我还将组件中的请求简化为没有 JSON.stringify 并且没有反引号。
推荐阅读
- dynamics-crm - 从商机表单打开时,在电话活动的发件人字段中设置公司名称
- javascript - 以特定方式重新排列 JSON 数据
- reactjs - swipe js如何使用API
- python - 在 anaconda 环境中安装了 tensorflow 但无法导入(Tensorflow 1.15、Python 3.6、PyCharm)
- javascript - 在本地反应中使用带有地理定位的钩子/状态我哪里出错了?
- php - 我可以在不先将文件写入服务器的情况下从 google drive API 返回文件吗?(php)
- wordpress - 无法安装 wordpress 插件和主题
- kconfig - Kconfig 并选择以获取预定义和可编辑的配置?
- c++ - 如何检查给定索引处的`std::vector`中是否存在**任何**元素
- javascript - ReactJS 用不同的元素替换损坏的图像