django - 无法将数组数据发送到 REST 端点
问题描述
我正在使用 Django REST 框架。我有一个看起来像这样的模型:
class Post(models.Model):
title = models.CharField(max_length=100, null=False)
content = HTMLField()
created_at = models.DateField(auto_now_add=True)
authors = models.ManyToManyField(User)
使用如下所示的 api 视图和序列化程序:
class CreateStoryApiView(CreateAPIView):
serializer_class = PostSerializer
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('title', 'content', 'authors')
转到实际的端点,我实际上可以成功提交。我正在尝试使用 Ajax 获取详细信息并将数据提交到端点,但由于某种原因,我总是收到 400 bad request 错误。如果我删除作者字段,则不会出现该错误。下面是 Ajax 请求的样子:
$.ajax({
type: 'POST',
url: '/api/save-post/',
data: {
"csrfmiddlewaretoken": getCookie('csrftoken'),
"title": "dasf",
"desct": "dasf",
"content": "fdasf",
"authors": [1,2]
},
success: function (msg) {
console.log(msg);
}
});
尝试此 Ajax 请求时收到 400 错误请求。为什么我不能成功提交我的数组?我已经尝试"authors[]": [1,2]
了"authors": "[1,2]"
很多其他组合,但似乎由于某种原因没有任何效果。我究竟做错了什么?
解决方案
检查你的 django settings.py 文件。您需要正确配置下一个参数才能发布来自另一台服务器的请求。
CORS_ORIGIN_WHITELIST = (
'localhost',
'your-domain.com',
'127.0.0.1',
'127.0.0.1:8080'
)
CSRF_TRUSTED_ORIGINS = (
'your-domain.com',
)
CORS_ORIGIN_ALLOW_ALL = True
CORS_EXPOSE_HEADERS = [
'Access-Control-Allow-Origin',
'Access-Control-Allow-Headers'
]
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'cache-control',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
)
我怀疑是因为它
推荐阅读
- java - 使用 Spark SQL 将 CCYYMMDD 日期格式转换为 DDMMYYYY 格式
- python - python的cmake execute_process抛出“权限被拒绝”错误
- python - Tensorflow 1.14+ 序列化子类 Keras 层?
- kml - ScreenOverlay 方向
- firebase - 如何使只有保存字符串的用户才能看到 Flutter / Firebase
- mongodb - 如何使用 mongodb 和 nodejs 中的聚合来查看集合以进行插入和删除?
- asp.net-mvc - 在 ASP.NET MVC 应用程序的本地 IIS 部署期间“加密操作期间发生错误”
- c++ - deprecated_string_conv_gen:从字符串文字到指针到字符(非常量)的转换在 C++ 中已弃用
- reactjs - 如何从子函数更改父挂钩
- c++ - 在Linux中部分发送消息时如何处理sendmsg(2)?