我正在创建前端应用程序,以与 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"
。
我在做什么错了?
答案 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端点所需的格式匹配非常重要。