2017-04-19 21 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

あなたは 'デバッグ= true'を持つアプリケーションを実行する場合は、500エラーページに、インタラクティブなWebベースのデバッガで、完全なトレースバックが表示されます。 – jwg

+0

@jwgコンソールを確認したところ、「no such table:user [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

クラスを定義した後で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 
関連する問題