我正在制作一个 REST API 来将日历日期存储在 Flask 中。尽管有 POST 端点,但在使用 fetch 时收到 405 错误。
这是 HTTP 错误:
"POST /MichelScott123/calendar/data HTTP/1.1" 405 -
Javascript 获取请求。
document.getElementById('submit').addEventListener('click', () =>{
var title = document.getElementById('titleInput');
var startDate = document.getElementById('startDateInput');
var startTime = document.getElementById('startTimeInput');
var endDate = document.getElementById('endDateInput');
var endTime = document.getElementById('endTimeInput');
var frequency = document.getElementById('frequencySelect');
console.log(startTime.value)
fetch(`/${username}/calendar/data`, {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
title: title.value,
startDate: startDate.value,
startTime: startTime.value,
endDate: endDate.value,
endTime: endTime.value,
frequency: frequency.value
}),
})
})
Flask REST API
@api.route('<username>/calendar/data')
def events(username):
if request.method == 'GET':
#THIS GET REQUEST IS WORKING FINE SO I WON'T INCLUDE THE CODE
#POST
if request.method == 'POST':
data = request.get_json()
print(data)
admin = Admin.query.filter_by(username=username).first()
startDateParsed = data.get('startDate').split('-')
endDateParsed = data.get('endDate').split('-')
startDate = datetime(year=int(startDateParsed[0]), month=int(startDateParsed[1]), day=int(startDateParsed[2]))
endDate = datetime(year=int(endDateParsed[0]), month=int(endDateParsed[1]), day=int(endDateParsed[2]))
startTimeParsed = data.get('startTime').split(':')
endTimeParsed = data.get('endTime').split(':')
startTime = time(hour=startTimeParsed[0], minute=startTimeParsed[1])
endTime = time(hour=endTimeParsed[0], minute=endTimeParsed[1])
new_event = CalendarDates(title=data.get('title'), startDate=startDate, startTime=startTime, endDate=endDate, endTime=endTime, frequency=data.get('frequency'), admin_id=admin.id)
db.session.add(new_event)
db.session.commit()
return '', 200
如果您需要更多代码,请评论。为了简洁起见,我没有包含整个 js 和 py 文件。感谢您的帮助。
发现我的错误,我忘记将正确的方法添加到我的路线中。
@api.route('<username>/calendar/data', methods=['GET', 'POST', 'PUT', 'DELETE'])