【问题标题】:Flask TypeError: 'NoneType' Not Subscriptable烧瓶类型错误:“NoneType”不可下标
【发布时间】:2021-08-11 11:57:29
【问题描述】:

我正在尝试在 Postman 中创建一个数据库,以便存储用户登录的电子邮件和密码,并且我已经构建了我的 flask app.py 文件,但是当我尝试在 Postman 中建立所述数据库时,我得到了错误:

File "C:\Users\cleve\Desktop\FINAL PROJECT\FP\flask\app.py", line 33, in add_user
    email = request.json['email']
TypeError: 'NoneType' object is not subscriptable

我不完全确定我做错了什么(我按照学校的指南来构建它并更改一些代码以满足我的项目的需要,)但这是我的 app.py 页面的全部内容。

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 User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(100), unique=False)
    password = db.Column(db.String(144), unique=False)

    def __init__(self, email, password):
        self.email = email
        self.password = password


class UserSchema(ma.Schema):
    class Meta:
        fields = ('email', 'password')


user_schema = UserSchema()
users_schema = UserSchema(many=True)

@app.route('/user', methods=['POST'])
def add_user():
  email = request.json['email']
  password = request.json['password']
  new_user = User(email, password)
  db.session.add(new_user)
  db.session.commit()
  user = User.query.get(new_user.id)
  return user_schema.jsonify(user)
  
if __name__ == '__main__':
  app.run(debug=True, port=5000)

感谢您的宝贵时间。

【问题讨论】:

    标签: flask


    【解决方案1】:

    request.jsonrequest.get_json(force=False, silent=False, cache=True) 的快捷方式,如果您不发送Content-Type: application/json 标头,它会返回None,这可能是这里的问题。

    如果你调用request.get_json(force=True),你可以强制Flask解析JSON,例如:

    @app.route('/user', methods=['POST'])
    def add_user():
      json_data = request.get_json(force=True)
      email = json_data['email']
      password = json_data['password']
      new_user = User(email, password)
      db.session.add(new_user)
      db.session.commit()
      user = User.query.get(new_user.id)
      return user_schema.jsonify(user)
    

    【讨论】:

    • 所以我尝试了您建议的更改,我现在收到错误:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <title>400 Bad Request</title> <h1>Bad Request</h1> <p>Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)</p>
    猜你喜欢
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 2019-08-14
    • 1970-01-01
    相关资源
    最近更新 更多