我来自意大利面条代码 PHP 背景。我正在尝试通过使用 Flask 和 MongoDB 学习 Python 来学习 MVC。我认为这个问题可能适用于其他情况。这更像是一个新手 Python 问题。但这是我第一次使用这个设置遇到它。
我正在使用带有蓝图的 Flask 来布局我的应用程序。我将每个主要站点功能分解为 myapp 的子目录(模块/蓝图)。这是我的目录结构
目录结构
/proj/config.py
/proj/runserver.py
/proj/myapp/
/proj/myapp/__init__.py
/proj/myapp/static/
/proj/myapp/templates/
/proj/myapp/templates/users/
/proj/myapp/templates/forums/
/proj/myapp/templates/frontend/
/proj/myapp/users/
/proj/myapp/users/__init__.py
/proj/myapp/users/models.py
/proj/myapp/users/views.py
/proj/myapp/forums/ ..
/proj/myapp/frontend/ ..
所以我正在尝试实现这个简单的 MongoKit 示例。但不是将它放在一个文件中。我需要将它分散到 MVC 模式中。
MongoKit 示例
from flask import Flask, request, render_template, redirect, url_for
from flask.ext.mongokit import MongoKit, Document
app = Flask(__name__)
class User(Document):
__collection__ = 'user'
structure = {
'name': unicode,
'email': unicode,
}
required_fields = ['name', 'email']
use_dot_notation = True
db = MongoKit(app)
db.register([User])
我的应用程序的主要部分在init .py 中,它看起来像:
/myapp/_初始化_.py
from flask import Flask, render_template, abort
from flask.ext.mongokit import MongoKit, Document
from .home.views import mod as home_blueprint
from .users.views import mod as user_blueprint
from .forums.views import mod as forum_blueprint
def create_app():
app = Flask(__name__)
app.config.from_object('config')
# Register blueprints
app.register_blueprint(home_blueprint)
app.register_blueprint(user_blueprint, url_prefix="/users")
app.register_blueprint(forum_blueprint, url_prefix="/forums")
db = MongoKit(app)
@app.errorhandler(404)
def not_found(error):
return render_template('404.html')
@app.errorhandler(500)
def internal_error(exception):
return "Some internal error has taken place. Alert somebody!"
return app
然后我不太确定如何处理其余部分。我在 /myapp/users/models.py 中设置了一个类,如下所示。我知道最后一个语句没有定义。我不确定它是放在那里还是我需要把它放在其他地方。或者如果它确实去了那里,我如何从init .py 中的 create_app() 获取“db”。我认为这与 MongoKit 和基本的 Python 东西关系不大。
/myapp/users/models.py
from flask.ext.mongokit import MongoKit, Document
class User(Document):
structure = {
'name': unicode,
'email': unicode,
}
use_dot_notation = True
db.register([User])