Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中实现MVC?(使用烧瓶和MongoKit)_Python_Mongodb_Model View Controller_Flask_Mongokit - Fatal编程技术网

在Python中实现MVC?(使用烧瓶和MongoKit)

在Python中实现MVC?(使用烧瓶和MongoKit),python,mongodb,model-view-controller,flask,mongokit,Python,Mongodb,Model View Controller,Flask,Mongokit,我来自意大利面代码PHP背景。我试图通过使用Flask和MongoDB在Python上切齿来学习MVC。我认为这个问题也适用于其他情况。这更像是一个新手Python问题。但这是我第一次在这个设置中遇到它 我正在使用带有蓝图的烧瓶来布局我的应用程序。我正在将每个主要站点功能分解为myapp(模块/蓝图)的子目录。这是我的目录结构 目录结构 /proj/config.py /proj/runserver.py /proj/myapp/ /proj/myapp/__init__.py /proj/my

我来自意大利面代码PHP背景。我试图通过使用Flask和MongoDB在Python上切齿来学习MVC。我认为这个问题也适用于其他情况。这更像是一个新手Python问题。但这是我第一次在这个设置中遇到它

我正在使用带有蓝图的烧瓶来布局我的应用程序。我正在将每个主要站点功能分解为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/ ..
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])
所以我试图实现这个简单的MongoKit示例。而不是把它放在一个文件里。我需要在MVC模式中进行扩展

MongoKit样本

/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/ ..
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/_init.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
from flask.ext.mongokit import MongoKit, Document

class User(Document):
    structure = {
    'name': unicode,
    'email': unicode,
}
    use_dot_notation = True

db.register([User])
from flask.ext.mongokit import MongoKit, Document

# import db below like this
from myapp import db

class User(Document):
    structure = {
    'name': unicode,
    'email': unicode,
}
use_dot_notation = True

# ok to do this below
db.register([User])
然后我不太确定剩下的怎么办。我在/myapp/users/models.py中设置了一个类,如下所示。我知道最后一句话没有定义。我不确定它是放在那里还是需要放在别的地方。或者,如果它确实存在,如何从init.py中的create_app()获取“db”。我认为这与MongoKit和基本Python内容的关系不大

/myapp/users/models.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
from flask.ext.mongokit import MongoKit, Document

class User(Document):
    structure = {
    'name': unicode,
    'email': unicode,
}
    use_dot_notation = True

db.register([User])
from flask.ext.mongokit import MongoKit, Document

# import db below like this
from myapp import db

class User(Document):
    structure = {
    'name': unicode,
    'email': unicode,
}
use_dot_notation = True

# ok to do this below
db.register([User])

如果您想使用create_app函数,那么我会将您的
\uuuu init\uuuu.py
更改为类似以下内容:

/myapp/\uuuuu init\uuuuuu.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,db

# Make sure you are calling create_app func below:
(app,db) = create_app()
现在,在模型代码中,您可以引用db变量

/myapp/users/models.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
from flask.ext.mongokit import MongoKit, Document

class User(Document):
    structure = {
    'name': unicode,
    'email': unicode,
}
    use_dot_notation = True

db.register([User])
from flask.ext.mongokit import MongoKit, Document

# import db below like this
from myapp import db

class User(Document):
    structure = {
    'name': unicode,
    'email': unicode,
}
use_dot_notation = True

# ok to do this below
db.register([User])