django - 获取 Django POST 请求的 API

标签 django reactjs redux fetch fetch-api

我正在尝试从 React/Redux/Django Web 应用程序中删除 jQuery 并替换 $.ajax方法与 Fetch API。我或多或少让所有 GET 请求工作正常,并且似乎能够满足我的 POST 请求,但我似乎无法以实际将我的 POST 数据获取到 Django request.POST 的方式格式化我的请求。目的。每次我点击/sign_in View 时,request.POST对象为空。我的整个应用程序的后端是围绕使用 Django 表单构建的(没有 Django 模板,只是 React 控制的组件),我真的希望不必重写我的所有 View 来使用 request.bodyrequest.data .

这是我认为相关的所有代码,如果还有更多有用的代码,请告诉我:

这是我用来构建完整 POST 数据并附加 CSRF token 的柯里化(Currying)函数:

const setUpCsrfToken = () => {
  const csrftoken = Cookies.get('csrftoken')

  return function post (url, options) {
  const defaults = {
    'method': 'POST',
    'credentials': 'include',
    'headers': {
      'X-CSRFToken': csrftoken,
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  }

  const merged = merge(options, defaults)
  return fetch(url, merged)
  }
}

export const post = setUpCsrfToken()

这是我在 React 应用程序中使用的 API 方法:

export const signIn = data => {
  return post('/api/account/sign_in/', data)
}

最初打包在 React 应用程序本身中的数据就像带有字符串值的对象一样简单:

{
    email: 'email@email.com',
    password: 'password
}

我查看了这些问题,发现它们名义上很有帮助,但我无法为自己综合一个考虑到我认为 Django 的一些复杂性的答案:

谢谢!

最佳答案

您必须设置适当的 X-Requested-With header 。 jQuery 就是这样做的 under the hood

X-Requested-With: XMLHttpRequest

因此,在您的示例中,您需要类似的内容:

const setUpCsrfToken = () => {
  const csrftoken = Cookies.get('csrftoken')

  return function post (url, options) {
    const defaults = {
      'method': 'POST',
      'credentials': 'include',
      'headers': new Headers({
        'X-CSRFToken': csrftoken,
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'X-Requested-With': 'XMLHttpRequest'
      })
    }

    const merged = merge(options, defaults)
    return fetch(url, merged)
  }
}

关于django - 获取 Django POST 请求的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44711682/

相关文章:

python - 无法打开包含文件 : 'mysql.h'

django - 通过电子邮件关联用户

javascript - $_POST 未读取 Axios 发布参数

html - antd选择元素: how can I disable typing?

javascript - 用增强器扩展 Redux 的 createStore 的模式是什么?

reactjs - redux 状态更新后 ComponentDidMount 没有被调用?

reactjs - withRouter、connect() 和 React-Compose

django - 运行单元测试时禁用 Django South?

python - 在 Django 中使用 prefetch_related 连接 ManyToMany 字段

javascript - 更新嵌套在对象内的数组的状态(ReactJS)