NoneType 对象不可订阅(Flask、Python、SQLAlchemy)

NoneType Object is not subscriptable (Flask, Python, SQLAlchemy)

我知道这似乎是个愚蠢的问题,但我查了又查,找不到任何似乎可以解决问题的答案。

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
import os

app = Flask(__name__)

basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'app.sqlite')
db = SQLAlchemy(app)
ma = Marshmallow(app)

class Guide(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), unique=False)
    content = db.Column(db.String(144), unique=False)

    def __init__(self, title, content):
        self.title = title
        self.content = content


class GuideSchema(ma.Schema):
    class Meta:
        fields = ('title', 'content')


guide_schema = GuideSchema()
guides_schema = GuideSchema(many=True)

# Endpoint to create a new guide
@app.route('/guide', methods=["POST"])
def add_guide():
    title = request.json['title']
    content = request.json['content']

    new_guide = Guide(title, content)

    db.session.add(new_guide)
    db.session.commit()

    guide = Guide.query.get(new_guide.id)

    return guide_schema.jsonify(guide)


# endpoint to query all guides
@app.route('/guides', methods=["GET"])
def get_guides():
    all_guides = Guide.query.all()
    result = guides_schema.dump(all_guides)
    return jsonify(result.data)


if __name__ == '__main__':
    app.run(debug=True)


完整追溯:

Traceback (most recent call last):
  File "/Users/bmoney/Documents/python_projects/flask-practice/venv/lib/python3.9/site-packages/flask/app.py", line 2088, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/bmoney/Documents/python_projects/flask-practice/venv/lib/python3.9/site-packages/flask/app.py", line 2073, in wsgi_app
    response = self.handle_exception(e)
  File "/Users/bmoney/Documents/python_projects/flask-practice/venv/lib/python3.9/site-packages/flask/app.py", line 2070, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/bmoney/Documents/python_projects/flask-practice/venv/lib/python3.9/site-packages/flask/app.py", line 1515, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/bmoney/Documents/python_projects/flask-practice/venv/lib/python3.9/site-packages/flask/app.py", line 1513, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/bmoney/Documents/python_projects/flask-practice/venv/lib/python3.9/site-packages/flask/app.py", line 1499, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "/Users/bmoney/Documents/python_projects/flask-practice/app.py", line 34, in add_guide
    title = request.json['title']
TypeError: 'NoneType' object is not subscriptable

我知道 None 在这种情况下不可迭代,但我看不出什么是 运行 一个 None 类型错误。

关于信息的价值,我在正确的本地主机上通过 Postman 运行 GET 和 POST 请求。

提前谢谢你,我真的很感谢这个社区!

request.json 当 Flask 服务器未接收到任何 JSON 数据或任何带有 application/json 的 Content-Type 的请求时 None。

要解决此问题,请确保您的客户端(如果您使用的是 JS 或 Postman)使用 application/json 作为 headers 中的 Content-Type,并且它应该具有 JSON有效负载。

看看这个,我希望你会发现如何让你的 client-side 在请求中发送 JSON 有效负载:Fetch: POST JSON data