Flask与经理一起返回404

时间:2015-12-17 22:51:56

标签: python flask flask-script

我有一个小型休息应用程序,具有以下结构

Basedir
  - manage.py
  - load_gen
    - __init__.py
    - app.py
    - models.py
来自manage.py

代码段

from load_gen import app, db
from load_gen.models import User
from flask.ext.script import Manager

manager = Manager(app)

if __name__ == '__main__':
    manager.run()
来自 init .py

代码段

import os

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

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

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'test.db')
db = SQLAlchemy(app)

from load_gen import models
from load_gen import app

最后是app.py

from flask import Flask, jsonify, abort,make_response,url_for    
from models import User

app = Flask(__name__)

tasks = [
    {
        'id': 1,
        'title': u'Buy groceries',
        'description': u'Milk, Cheese, Pizza, Fruit, Tylenol', 
        'done': False
    }
]
def make_public_task(task):
    new_task = {}
    for field in task:
        if field == 'id':
            new_task['uri'] = url_for('get_task', task_id=task['id'], _external=True)
        else:
            new_task[field] = task[field]
    return new_task

@app.route('/todo/api/v1.0/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': [make_public_task(task) for task in tasks]})

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

当我尝试使用python manage.py runserver运行时,我的应用程序路由未注册,我一直收到404 Not Found。 url used - localhost:5000 / todo / api / v1.0 / tasks。

我花了3个小时试图搞清楚但是被卡住了。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您运行的app和您注册路线的app不一样。

manage.py你有

from load_gen import app

manager = Manager(app)

app.py(现在为load_app.py),您有

app = Flask(__name__)

@app.route('/todo/api/v1.0/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': [make_public_task(task) for task in tasks]})

您需要在任何地方使用相同的app。不要在app中定义load_app.py,您应该全部设置,只需删除__init__.py末尾的导入,然后将load_app.py更改为

from load_gen import app

答案 1 :(得分:0)

您的manage.py正在以奇怪的方式设置内容。我会将一些代码放在__init__.py的末尾。导入模型和视图(在app.py中)后,在init.py的底部创建您的经理:

manager = Manager(app)

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

然后在您的manage.py中,您所要做的就是:

from load_gen import manager
manager.run()

因为manager对象是在应用程序模块中创建的,因此在适当的上下文中创建了视图和数据库。