React axios发布错误:“请求失败,状态码为400”

时间:2020-05-13 17:27:49

标签: django reactjs django-rest-framework axios

我正在创建前端应用程序,以与 django 中的后端进行交互,并使用 djangorestframework 。在这里,我通过调用API端点来进行纯格式提交。我正在使用 axios 发出发布请求。我把axios方法和handleSubmit()方法放在一起了:

handleSubmit(event){
event.preventDefault();

const data = {
   first_name: this.state.first_name,
   last_name: this.state.last_name,
   dob: this.state.dob,
   sex: this.state.sex
 };

axios.post('http://127.0.0.1:8000/profile/create/', data)
.then(res => console.log(res))
.catch(err => console.log(err));
};

在后端,我正在使用generics.CreateAPIView视图:

class CreateProfile(generics.CreateAPIView):
    serializer_class = ProfileSerializer

网址:path('profile/create/', CreateProfile.as_view()),

models.py:

class Profile(models.Model):
    MALE = 'M'
    FEMALE = 'F'
    TRANS = 'T'
    NO_MENTION = 'NO'
    GENDER_CHOICES = [
        (MALE, 'Male'),
        (FEMALE, 'Female'),
        (TRANS, 'Trans'),
        (NO_MENTION, 'Rather not say')
    ]
    first_name = models.CharField(max_length=15)
    last_name = models.CharField(max_length=15)
    dob = models.DateField(auto_now=False)
    sex = models.CharField(max_length=15, choices=GENDER_CHOICES)

我提交表单时,此错误显示在控制台中:Error: "Request failed with status code 400"

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

400提示可能存在无效的表单数据。确保已在表单数据中包含所有模型字段,根据模型定义,这些字段不可为空。另外,其他约束也可能会受到影响。如果您共享模型,那将使事情变得容易得多。

但是,更像是,由于CORS保护,您的请求被阻止了。

通过以下方式安装django-cors

pip install django-cors-headers

,然后在您的设置中。py

添加或添加

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]

以及

MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django < 1.10
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

并定义您的CORS白名单类似的内容

CORS_ORIGIN_WHITELIST = [
    "https://example.com",
    "https://sub.example.com",
    "http://localhost:8080",
    "http://127.0.0.1:9000"
]

看看django-cors-headers here上的文档。

答案 1 :(得分:0)

这可以通过在表单的日期输入字段中更改日期格式来解决。根据 Django REST框架,日期格式为 YYYY-MM-DD 。因此,我必须以相同的格式将日期作为type="text"插入,这解决了该错误。

状态码400表示请求错误。即,客户端已出错。因此,观察客户端的输入格式是否与api端点所需的格式匹配非常重要。