javascript - 如何在 REST API 中对特定模型的所有字段使用一个更新函数?

标签 javascript reactjs rest

我正在为一个项目使用 Django REST Framework 和 React。我有一个名为 /api/account/user/ 的 API 路由,它接受 GET 和 POST 请求 (RetrieveUpdateAPIView)。现在,在我的 React 前端,我的操作文件中有这个函数,我想用它来更新用户数据:

export const updateUser = (email, name, company, phoneVerified, idVerified) => {
    return (dispatch, getState) => {
        const token = getState().auth.token
        let headers = {
            'Content-Type': 'application/json'
        }

        if (token) {
            headers['Authorization'] = `Token ${token}`
        }
        let body = JSON.stringify({email, name, company, phoneVerified, idVerified})

        return fetch('//localhost:8000/api/account/user/', {headers, body, method: 'POST'})
            .then(res => {
                if (res.status < 500) {
                    return res.json().then(data => {
                        return {status: res.status, data}
                    })
                }
                else {
                    console.log('Server error.')
                }
            })
            .then(res => {
                console.log(res)
                if (res.status === 200) {
                    dispatch({type: 'USER_UPDATE_SUCCESSFUL', data: res.data})
                    return res.data
                }
                else if (res.status === 403 || res.status === 401) {
                    dispatch({type: 'USER_UPDATE_FAILED', data: res.data})
                    return res.data
                }
                else {
                    dispatch({type: 'USER_UPDATE_FAILED', data: res.data})
                    return res.data
                }
            })
    }
}

如果我传递所有参数(email, name, company, phoneVerified, idVerified),这个函数就可以工作,但是例如,如果我只想更新phoneVerified按钮单击事件,如何只传递该参数?目前我正在这样做:

updateUser: (phoneVerified) => dispatch(auth.updateUser(phoneVerified))

但是服务器响应是This field may not be null。对此的任何帮助将不胜感激。

最佳答案

这不是React的问题,是你后端代码怎么处理。

您在rest API 中使用HTTP POST 方法,默认情况下它用于创建一条记录

您应该为您的端点实现其他 HTTP 方法处理,它是 PUT 方法,但是使用 PUT,您仍然需要发送具有更新属性的整个对象来更新它(通常,PUT 应该用于更新整个记录)

另一种 HTTP 方法更适合您的情况,它是 PATCH 方法,就像 PUT 一样,但您可以将更新后的属性与记录 ID 一起发送到服务器(PATCH 应该用于部分更新记录 ).

对于这两种情况,只是应该,而不是必须,因为它是HTTP 的标准约定,不受限制。即使您仍然可以使用 GET 方法来创建记录。

关于javascript - 如何在 REST API 中对特定模型的所有字段使用一个更新函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58881702/

相关文章:

git - 如何通过 github rest api 将子模块更新为指定的提交?

javascript - 使用 React 为多个文本添加动画效果

javascript - ReactJS 表单提交 preventdefault 不起作用

javascript - 当我制作动态发票时,如何使用 JavaScript 在 HTML 表中进行计算?

reactjs - 具有 "outlined"变体的 Material-UI 单选按钮

css - 为什么我的 CSS 过渡在 React 18 中不起作用

java - 无法解析 .andExpect() 方法

python - django rest framework 'QuerySet' 对象没有属性 '_meta'

javascript - 没有 tbody 和 th block 的 jquery tablesorter 用法

javascript - 通过 TypeScript 导入和 Webpack2 使用 DatePicker