如何为python flask应用程序提供结构

时间:2016-12-19 09:40:10

标签: python mongodb flask mongoalchemy

我是python flask的新手

使用MongoDB尝试一些端点,如下所示在单个文件中

from flask import Flask, request
from flask.ext.mongoalchemy import MongoAlchemy
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['MONGOALCHEMY_DATABASE'] = 'library'
db = MongoAlchemy(app)


class Author(db.Document):
    name = db.StringField()


class Book(db.Document):
    title = db.StringField()
    author = db.DocumentField(Author)
    year = db.IntField();


@app.route('/author/new')
def new_author():
    """Creates a new author by a giving name (via GET parameter)
    e.g.: GET /author/new?name=Francisco creates a author named Francisco
    """
    author = Author(name=request.args.get('name', ''))
    author.save()
    return 'Saved :)'






@app.route('/authors/')
def list_authors():
    """List all authors.

    e.g.: GET /authors"""
    authors = Author.query.all()
    content = '<p>Authors:</p>'
    for author in authors:
        content += '<p>%s</p>' % author.name
    return content

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

上面的代码包含两个要发布的端点并获取正常工作的数据

知道找一种将代码分成不同文件的方法,比如

数据库连接相关代码应该在不同的文件中

from flask import Flask, request
from flask.ext.mongoalchemy import MongoAlchemy
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['MONGOALCHEMY_DATABASE'] = 'library'
db = MongoAlchemy(app)

我应该可以在定义架构的不同文件中获取数据库引用并使用它

class Author(db.Document):
    name = db.StringField()


class Book(db.Document):
    title = db.StringField()
    author = db.DocumentField(Author)
    year = db.IntField();

和路线将是不同的文件

@app.route('/author/new')
def new_author():
    """Creates a new author by a giving name (via GET parameter)
    e.g.: GET /author/new?name=Francisco creates a author named Francisco
    """
    author = Author(name=request.args.get('name', ''))
    author.save()
    return 'Saved :)'






@app.route('/authors/')
def list_authors():
    """List all authors.

    e.g.: GET /authors"""
    authors = Author.query.all()
    content = '<p>Authors:</p>'
    for author in authors:
        content += '<p>%s</p>' % author.name
    return content

这里在端点文件中我应该得到数据库模式的引用,请帮助我获得这个结构

指向一些可以帮助我做的可理解的样本或视频,我是python以及刻录的新手请点一些示例并帮助了解更多,谢谢

1 个答案:

答案 0 :(得分:2)

基本结构可能如下所示:

/yourapp  
    /run.py  
    /config.py  
    /yourapp  
        /__init__.py
        /views.py  
        /models.py  
        /static/  
            /main.css
        /templates/  
            /base.html  
    /requirements.txt  
    /venv

应用于您的示例,它看起来像这样。

run.py :启动您的应用程序。

from yourapp import create_app

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

config.py :包含配置,您可以添加子类来区分开发配置,测试配置和生产配置

class Config:
    DEBUG = True
    MONGOALCHEMY_DATABASE = 'library'

yourapp / __ init __。py :初始化应用程序创建Flask实例。 (也使你的应用程序成为一个包)。

from flask import Flask
from flask.ext.mongoalchemy import MongoAlchemy
from config import Config

db = MongoAlchemy()

def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)

    db.init_app(app)

    from views import author_bp
    app.register_blueprint(author_bp)

    return app

yourapp / models.py :包含您的不同型号。

from . import db

class Author(db.Document):
    name = db.StringField()


class Book(db.Document):
    title = db.StringField()
    author = db.DocumentField(Author)
    year = db.IntField();

yourapp / views.py :有时也称为routes.py。包含您的网址端点和相关行为。

from flask import Blueprint
from .models import Author

author_bp = Blueprint('author', __name__)

@author_bp.route('/author/new')
def new_author():
    """Creates a new author by a giving name (via GET parameter)
    e.g.: GET /author/new?name=Francisco creates a author named Francisco
    """
    author = Author(name=request.args.get('name', ''))
    author.save()
return 'Saved :)'

@author_bp.route('/authors/')
def list_authors():
   """List all authors.     
   e.g.: GET /authors"""
   authors = Author.query.all()
   content = '<p>Authors:</p>'
   for author in authors:
       content += '<p>%s</p>' % author.name
   return content

(在您的情况下没有必要) yourapp / static /...包含您的静态文件。

yourapp / templates /..包含您的模板。

requirements.txt 包含您的软件包依赖项的快照。

venv (Virtualenv)文件夹,您的python库可以在包含的环境中工作。

参考文献:

Have a look at this related question.

Good example of a widely used project structure.