我想了解为什么我在这里得到200状态代码。我正在运行flask应用程序,并在请求处理端点而不是处理方法时得到200状态代码作为响应。
这是最小的,可重复的代码。
app.py
个文件:
from flask import Flask, request, abort, jsonify
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Column, String, Integer
def create_app():
db = SQLAlchemy()
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "postgresql://postgres:postgres@localhost:5432/so_question"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy()
db.app = app
db.init_app(app)
db.create_all()
class Book(db.Model):
__tablename__ = 'books'
id = Column(Integer, primary_key=True)
def __init__(self, id):
self.id = id
def format(self):
return {
'id': self.id,
}
@app.route('/books')
def get_books():
books = Book.query.order_by(Book.id).all()
return jsonify({
'books': [book.format() for book in books],
})
@app.route('/books/<int:book_id>', methods=["PATCH"])
def update_title(book_id):
return jsonify({
'success': True
})
@app.errorhandler(405)
def not_allowed(error):
return jsonify({
"success": False,
})
return app
然后我运行了FLASK_APP=app.py flask run
。
我发出了以下请求:curl -X GET http://127.0.0.1:5000/books
,结果如下:
{
"books": [
{
"id": 1
},
{
"id": 2
}
]
}
但是,这是我不了解的:我没有处理到/books/<int:book_id
端点的POST请求,实际上,如果我发出了该请求:curl -X POST http://127.0.0.1:5000/books/2
404错误处理程序将管理响应。我不明白的是为什么服务器用"POST /books/2 HTTP/1.1" 200 -
响应。为什么要将此错误的200状态代码实际检测为错误(因为响应是由405错误处理程序处理的?)。
我很确定答案与this post有关,但是我在这里问为什么会这样,而不是怎么解决,或者什么应该是解决此问题的最佳状态代码?
答案 0 :(得分:1)
不带状态代码返回将默认为代码200
def not_allowed(error):
return jsonify({
"success": False,
})
此函数应返回所需的状态码。
return jsonify({"success": False}), 405