从 Django Rest API 默认路由器获取时出现 500(内部服务器错误)(创建对象)
500 (Internal Server Error) when fetching from Django Rest API default router (to create object)
我正在尝试让 Django 和 React 一起工作,虽然我有 Django 的基础知识(我可以开发一个网站),但我才刚刚开始学习 React。
我的项目结构是根据this video which is loosely based on this blog依次
我的 API 工作得很好,我可以毫无问题地创建、检索、更新和删除对象。
此外,在我的前端,我通过获取相关的 API Url.
成功地从我的数据库中正确显示了项目列表
为了说清楚,这里是主要的 'backend' urls.py
:
from rest_framework import routers
from .views import AssessmentViewSet
router = routers.DefaultRouter()
router.register('api/assessments', AssessmentViewSet, 'assessments')
urlpatterns = router.urls
现在,根据我在 API 网页上看到的内容,对象是在同一个 Url 上创建和检索的,即 http://127.0.0.1:8000/api/assessments/
,正如您从该屏幕截图中看到的那样。
我想唯一的区别是,当我想创建一个对象时,我所要做的就是在 fetch
函数中指定,我正在发出 POST
请求.这是在我的 CreateAssessmentForm.jsx
文件中完成的:
import React, { Component } from "react";
class CreateAssessmentForm extends Component {
state = {
loading: false,
title: "",
is_finished: false,
created_at: "",
};
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
let value = event.target.value;
console.log("Value: ", value);
this.setState({
title: value,
});
}
handleSubmit(event) {
event.preventDefault(console.log("Item:", this.state));
fetch("http://127.0.0.1:8000/api/assessments", {
method: "POST",
headers: {
"Content-type": "application/json",
},
body: JSON.stringify(this.state.title),
}).then(response => {
this.setState({
loading: false,
title: "",
is_finished: false,
created_at: "",
}).catch(function (error) {
console.log("ERROR:", error);
});
});
}
render() {
return (
<div>
{this.state.loading ? (
<div className="text-center">Loading...</div>
) : (
<form onSubmit={this.handleSubmit} method="POST">
<h2 className="text-center">Assessment Title</h2>
<div className="form-group">
<label htmlFor="Title">Title</label>
<input
onChange={this.handleChange}
type="text"
className="form-control"
id="TitleInput"
value={this.state.title}
placeholder="E.g. History Quiz"
/>
</div>
<button type="submit" className="btn btn-primary">
Submit
</button>
</form>
)}
</div>
);
}
}
export default CreateAssessmentForm;
当我在 title
输入中输入内容时,控制台会正确记录每个条目,当我按下提交 button
时,它还会记录一个对象(正如您从代码中看到的那样以上是我的实际 state
- {this.state}
)。
问题是在提交时,我得到一个 500 (Internal Server Error)
并且该对象没有保存在后端数据库中。
有谁知道我做错了什么吗?
最好的方法是在收到内部服务器错误时检查 django 日志是什么。应该很清楚你做错了什么,如果没有,请post错误日志。
我正在尝试让 Django 和 React 一起工作,虽然我有 Django 的基础知识(我可以开发一个网站),但我才刚刚开始学习 React。
我的项目结构是根据this video which is loosely based on this blog依次
我的 API 工作得很好,我可以毫无问题地创建、检索、更新和删除对象。
此外,在我的前端,我通过获取相关的 API Url.
成功地从我的数据库中正确显示了项目列表为了说清楚,这里是主要的 'backend' urls.py
:
from rest_framework import routers
from .views import AssessmentViewSet
router = routers.DefaultRouter()
router.register('api/assessments', AssessmentViewSet, 'assessments')
urlpatterns = router.urls
现在,根据我在 API 网页上看到的内容,对象是在同一个 Url 上创建和检索的,即 http://127.0.0.1:8000/api/assessments/
,正如您从该屏幕截图中看到的那样。
我想唯一的区别是,当我想创建一个对象时,我所要做的就是在 fetch
函数中指定,我正在发出 POST
请求.这是在我的 CreateAssessmentForm.jsx
文件中完成的:
import React, { Component } from "react";
class CreateAssessmentForm extends Component {
state = {
loading: false,
title: "",
is_finished: false,
created_at: "",
};
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
let value = event.target.value;
console.log("Value: ", value);
this.setState({
title: value,
});
}
handleSubmit(event) {
event.preventDefault(console.log("Item:", this.state));
fetch("http://127.0.0.1:8000/api/assessments", {
method: "POST",
headers: {
"Content-type": "application/json",
},
body: JSON.stringify(this.state.title),
}).then(response => {
this.setState({
loading: false,
title: "",
is_finished: false,
created_at: "",
}).catch(function (error) {
console.log("ERROR:", error);
});
});
}
render() {
return (
<div>
{this.state.loading ? (
<div className="text-center">Loading...</div>
) : (
<form onSubmit={this.handleSubmit} method="POST">
<h2 className="text-center">Assessment Title</h2>
<div className="form-group">
<label htmlFor="Title">Title</label>
<input
onChange={this.handleChange}
type="text"
className="form-control"
id="TitleInput"
value={this.state.title}
placeholder="E.g. History Quiz"
/>
</div>
<button type="submit" className="btn btn-primary">
Submit
</button>
</form>
)}
</div>
);
}
}
export default CreateAssessmentForm;
当我在 title
输入中输入内容时,控制台会正确记录每个条目,当我按下提交 button
时,它还会记录一个对象(正如您从代码中看到的那样以上是我的实际 state
- {this.state}
)。
问题是在提交时,我得到一个 500 (Internal Server Error)
并且该对象没有保存在后端数据库中。
有谁知道我做错了什么吗?
最好的方法是在收到内部服务器错误时检查 django 日志是什么。应该很清楚你做错了什么,如果没有,请post错误日志。