2017-04-19 110 views
-1

我已經在燒瓶中編寫了CRUD API,但每當我嘗試發出GET請求時,都會收到此錯誤,指出「內部服務器錯誤」。 POST請求也不適合我。 POST返回一個400錯誤,表示這是一個錯誤的請求。我在這裏做錯了什麼?燒瓶中的HTTP/1.0 500內部服務器錯誤

以下是我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') 

我在做什麼錯在這裏?任何幫助將不勝感激。

+0

如果您運行的500錯誤頁面上使用'調試= TRUE',你會看到一個完整的回溯,有一個互動的基於網絡的調試器,應用程序。 – jwg

+0

@jwg我檢查了控制檯,它顯示「沒有這樣的表:用戶[SQL:u'SELECT user.username AS user_username,user.password AS user_password,user.name AS user_name \ nFROM user']」 –

+2

將呼叫添加到['db.create_all()'](http://flask-sqlalchemy.pocoo.org/2.1/quickstart/#a-minimal-application)放在合適的地方。 –

回答

0

您需要在定義類之後'創建'用戶表,否則它不會顯示在內存中。 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