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
我知道这似乎是个愚蠢的问题,但我查了又查,找不到任何似乎可以解决问题的答案。
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