Post Request показывает ошибку 403 not found, даже жесткий класс разрешений в наборах представлений остального фреймворка django настроен на разрешение любых - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь сохранить данные в форме, используя почтовый метод.Для этого я установил права доступа AllowAny.Я проверил метод POST с помощью Postman, и он работает, но когда я использую axios для публикации тех же данных, он возвращает ошибку 403.

Я уже пытался использовать исправления, предоставленные в данном описании ссылки, но которые добавляют больше исключений. CSRF с Django, React + Redux с использованием Axios

Описание ошибки, приведенное в консоли

Error: Request failed with status code 403
    at createError (createError.js:16)
    at settle (settle.js:18)
    at XMLHttpRequest.handleLoad (xhr.js:77)

Python django rest framework code

#viewset class from python
class feedbackViewSet(viewsets.ModelViewSet):
    queryset = feedback.objects.all()
    permission_classes = [
        permissions.AllowAny
    ]
    serializer_class = feedbackSerializer

Код Java-скрипта с использованием axios для отправки данных на сервер

//axios post method
export const addFeedback = feedback => dispatch => {
  axios
    .post("/api/feedbacks/", feedback)
    .then(res => {
      dispatch({
        type: ADD_FEEDBACK,
        payload: res.data
      });
    })
    .catch(err => console.log(err));
};

Код формы содержит методы on submit, которые должны быть вызваны.

//form component code
import React, { Component } from "react";

import { connect } from "react-redux";
import PropTypes from "prop-types";
import { addFeedback } from "../../actions/feedbacks";

export class Form extends Component {
  state = {
    name: "",
    email: "",
    description: ""
  };

  static propTypes = {
    addFeedback: PropTypes.func.isRequired
  };

  onChange = e => this.setState({ [e.target.name]: e.target.value });

  onSubmit = e => {
    e.preventDefault();
    const { name, email, description } = this.state;
    const feedback = { name, email, description };
    this.props.addFeedback(feedback);
  };
  render() {
    const { name, email, description } = this.state;
    return (
      //some form generation code
    );
  }
}

export default connect(
  null,
  { addFeedback }
)(Form);

1 Ответ

0 голосов
/ 31 мая 2019

Проверить эту ссылку Axios

Я предполагаю, что вы пытаетесь отправить MIME-тип x-www-form-urlencoded, который должен вручную привести в порядок ваши данные.

const qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));
...