【问题标题】:Error in Postman 500 Internal server error apiPostman 500 内部服务器错误 api 中的错误
【发布时间】:2019-11-01 20:23:32
【问题描述】:

我正在使用烧瓶为网络构建一个 api 我已经有一个数据库并且 GET 请求有效,但是当我尝试 POST 时,它给了我这个错误

500 内部服务器错误

这是我写的代码

#User_schema
class UserSchema(ma.Schema):
 class Mata:
  fields = ('id', 'name', 'Email', 'Pass', 'Phone', 'Department', 'Major')

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

#create user
@app.route('/user', methods=['POST'])
def add_User():
 #id = request.json['id']
 name = request.json['name']
 Email = request.json['Email']
 Pass = request.json['Pass']
 #Phone = request.json['Phone']
 Department = request.json['Department']
 Major = request.json['Major']

 new_user = User(name, Email, Pass, Department, Major)
 db.session.add(new_user)
 db.session.commit()

 return user_schema.jsonify(new_user)

这是我在 post man 中添加的请求

{
    "name": "User 1",
    "Email": "User1@.com",
    "Pass": "qq1",
    "Phone": "0551",
    "Department": "IT 1",
    "Major": "IT 1"
}

我也在使用本地服务器 我查看了其他链接,每个人都在询问日志,如果我没记错的话,我想我是从

查看 > 开发人员 > 显示 DevTools > 控制台

这是日志的截图:(我认为)

这里到底是什么问题我不明白

编辑:这是完整的代码:

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:///db.db'
app.config['SQLALCHEMY_TRACK_MODIFICATION'] = False
db = SQLAlchemy(app)
ma = Marshmallow(app)

class User (db.Model):
 id = db.Column(db.Integer,primary_key=True)
 name = db.Column(db.String(30))
 Email = db.Column(db.String(30))
 Pass = db.Column(db.String(30))
 Phone = db.Column(db.Integer)
 Department = db.Column(db.String(30))
 Major = db.Column(db.String(30))
 meeting = db.relationship('Meeting', backref='creator')
 meetingroom = db.relationship('MeetingRoom', backref='reserver')

    def _init_(self, name, Email, Pass, Phone, Department, Major):
  self.name = name
  self.Email = Email
  self.Pass = Pass
  self.Phone = Phone
  self.Department = Department
  self.Major = Major

class MeetingRoom (db.Model):
 mrid = db.Column(db.Integer,primary_key=True)
 reserver_id = db.Column(db.Integer, db.ForeignKey('user.id'))
 #meetingm = db.relationship('Meeting', backref='roomno')
 mid = db.Column(db.Integer, db.ForeignKey('meeting.Mid'))

class Meeting (db.Model):
 Mid = db.Column(db.Integer,primary_key=True)
 Mname = db.Column(db.String(100))
 Des = db.Column(db.String(100))
 Date = db.Column(db.String(20))
 creator_id = db.Column(db.Integer, db.ForeignKey('user.id'))
 meetingroomm = db.relationship('MeetingRoom', backref='mroom')
 #roomno_id = db.Column(db.Integer, db.ForeignKey('meetingroom.mrid')


##json 
@app.route('/users', methods=['GET'])
def getuser():
 users = User.query.all()
 output = []
 for user in users:
  user_data = {}
  user_data['id'] = user.id
  user_data['name'] = user.name
  user_data['Email'] = user.Email
  user_data['Pass'] = user.Pass
  user_data['Phone'] = user.Phone
  user_data['Department'] = user.Department
  user_data['Major'] = user.Major
  output.append(user_data)
 return jsonify({'users' : output})


#User_schema
class UserSchema(ma.Schema):
 class Mata:
  fields = ('id', 'name', 'Email', 'Pass', 'Phone', 'Department', 'Major')

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

#create user
@app.route('/user', methods=['POST'])
def add_User():
 #id = request.json['id']
 name = request.json['name']
 Email = request.json['Email']
 Pass = request.json['Pass']
 #Phone = request.json['Phone']
 Department = request.json['Department']
 Major = request.json['Major']

 new_user = User(name, Email, Pass, Department, Major)
 db.session.add(new_user)
 db.session.commit()

 return user_schema.jsonify(new_user)

#meeting_schema
class MeetingSchema(ma.Schema):
 class Mata:
  fields = ('Mid', 'Mname', 'Des', 'Date', 'creator_id')

#init_schema
meeting_schema = MeetingSchema()
meetings_schema = MeetingSchema(many=True)

#create meeting
@app.route('/meeting', methods=['POST'])
def add_meeting():
 Mname = request.json['Mname']
 Des = request.json['Des']
 Date = request.json['Date']


 new_meeting = Meeting(Mname, Des, Date)
 db.session.add(new_meeting)
 db.session.commit()

 return user_schema.jsonify(new_meeting)


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

2nd EDIT: the console log

添加def错误后:

cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) database is locked
[SQL: INSERT INTO user (name, "Email", "Pass", "Phone", "Department", "Major") VALUES (?, ?, ?, ?, ?, ?)]
[parameters: ('User 1', 'User1@.com', 'qq1', '0551', 'IT 1', 'IT 1')]
(Background on this error at: http://sqlalche.me/e/e3q8)

【问题讨论】:

  • 您能否提及从将flask导入到app.run的整个代码。
  • @DineshSakthivel 我添加了完整代码,我按照本教程编写代码:youtube.com/watch?v=WxGBoY5iNXY&t=357s
  • 这个字段是必需的还是不是你评论的? #Phone = request.json['Phone'] 因为您将参数从邮递员传递给请求
  • 它曾经给我一个电话问题但结果问题出在邮递员的请求中我认为整数值不需要双引号,无论哪种方式我都尝试将它添加回代码它仍然给我同样的错误,我认为问题出在服务器或邮递员而不是代码
  • 做一件事,使用 ngrok 托管 url 而不是在本地机器上,因此它将充当公共 url 然后共享 URL 我们还将尝试将相同的参数传递给请求并查看错误其实是

标签: python json api flask postman


【解决方案1】:

可能错误是由于 Flask 的旧版本,所以尝试通过升级您的 Flask 版本来解决它。

打开 Anaconda 提示并输入

pip install --upgrade Flask

然后重启你的IDE

【讨论】:

    【解决方案2】:

    如控制台所示,问题是您正在使用构造函数初始化 User 对象,但在 User 类中您尚未定义任何构造函数。

    定义这样的构造函数

    class User(db.Model): ... 
    ....
       def __init__(self, username, email):
          self.username = username
          self.email = email
          # all your attributes
    

    【讨论】:

    • 遗憾的是它仍然给出同样的错误
    • 你有没有根据你的代码修改构造函数。您可以更新代码并在问题中添加新的错误屏幕截图吗?
    • 我更新了问题,似乎是插入到 sql 中的问题,我该如何解决这个问题?它显示不带引号的名称
    • 删除之前的数据库并重新创建。
    • 谢谢你,我认为它有效,我有一个问题,当我写帖子时,我应该在参数中添加外键吗?
    猜你喜欢
    • 2021-03-02
    • 2014-10-16
    • 1970-01-01
    • 2014-11-19
    • 2016-01-10
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多