烧瓶中的HTTP / 1.0 500内部服务器错误

时间:2017-04-19 06:50:27

标签: python mysql flask sqlalchemy flask-sqlalchemy

我已经在烧瓶中编写了一个CRUD API但是每当我尝试发出GET请求时,我都会收到此错误,说明"内部服务器错误"。 POST请求对我来说也不起作用。 POST返回400错误,说这是一个错误的请求。我在这里做错了什么?

以下是我的run.py文件

from flask import Flask, jsonify, abort, request
from flask_restless import APIManager
from flask_sqlalchemy import SQLAlchemy
from flask import make_response

app = Flask(__name__)
app.config.from_pyfile('config.py')
db = SQLAlchemy(app)

class User(db.Model):
    username = db.Column(db.String(50), primary_key=True)
    password = db.Column(db.String(50))
    name = db.Column(db.String(20))

    def __init__(self, name, uname, pword):
        self.username = uname
        self.name = name
        self.password = pword

@app.route('/api/users/', methods = ['GET'])
def index():
    return jsonify({'users': User.query.all()})

@app.route('/api/<string:username>/')
def get_user(username):
    return jsonify({'users': User.query.get(username)})

@app.errorhandler(404)
def not_found(error):
    return make_response(jsonify({'error': 'Not found'}), 404)

@app.route('/api/users/', methods = ['POST'])
def create_user():
    if not request.json or not 'name' in request.json:
        abort(400)
    user = User(request.json.username, request.json.get('name', ''), request.json.get('password',''))
    db.session.add(user)
    db.session.commit()
    return jsonify( { 'User': user } ), 201

@app.route('/api/users/<string:username>', methods = ['DELETE'])
def delete_user(username):
    db.session.delete(Users.query.get(username))
    db.session.commit()
    return jsonify( { 'result': True } )

@app.route('/api/users/<string:username>', methods = ['PUT'])
def update_user(username):
    user = User.query.get(username)
    user.username = request.json.get('username', ser.username)
    user.name = request.json.get('name',user.name)
    user.focus = request.json.get('password', user.password)
    db.session.commit()
    return jsonify( { 'user': user } )

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

以下是我的config.py文件

import os
basedir = os.path.abspath(os.path.dirname(__file__))

SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.sqlite')
SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository')

我在这里做错了什么?任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

你需要创造&#39;定义其类后的User表,否则它不会显示在内存中。 http://flask-sqlalchemy.pocoo.org/2.1/api/#flask.ext.sqlalchemy.SQLAlchemy.create_all

这样做的方法是:

class User(db.Model):
    username = db.Column(db.String(50), primary_key=True)
    password = db.Column(db.String(50))
    name = db.Column(db.String(20))

    def __init__(self, name, uname, pword):
        self.username = uname
        self.name = name
        self.password = pword

db.create_all()

...the rest of your code