首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在烧瓶中参考多种型号?

如何在烧瓶中参考多种型号?
EN

Stack Overflow用户
提问于 2015-02-02 18:32:08
回答 2查看 3.3K关注 0票数 3

如何在一个水瓶应用程序中处理和引用多个模型?

我有什么理由不能拥有多个模型类,.py文件?与一个大的models.py不同,是否有一种方法可以在烧瓶中添加以下内容:

示例模型:

代码语言:javascript
复制
students.py
teachers.py
classes.py
schedules.py
...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-02 18:33:18

是的,您可以为您的模型使用多个模块。在Flask或Python中,没有任何东西限制您使用特定的模块名称或仅限一个模块。

如果使用的是Flask,只需确保在每个对象中导入db对象(定义Model对象的SQLAlchemy实例)。

当您想要使用模型时,只需从正确的模块导入它:

代码语言:javascript
复制
from students import Student
# etc.

如果您要在模型之间创建引用,或者希望使用函数,那么在某个时候您将需要导入所有模型。将每个模块添加一个模型到您的主模块将确保发生这种情况。

票数 1
EN

Stack Overflow用户

发布于 2020-04-25 00:22:41

这是一个我想构建的烧瓶应用程序,像Django:

代码语言:javascript
复制
/blog_project
    config.py
    wsgi.py
    .gitignore
    /blog_app
        __init__.py # where factory application resides 
        /users
            /static
            /templates
            __init__.py
            models.py
            routes.py
            views.py
       /posts
            /static
            /templates
            __init__.py
            models.py
            routes.py
            views.py

我试图以类似于姜戈项目的方式构建我的烧瓶应用程序,因为我的应用程序变得太笨重,难以维护。我有一个工厂应用程序函数,它创建了在蓝图中注册的Flask对象。

代码语言:javascript
复制
# users/routes.py

# import 
from Flask import Blueprint
from users.views import get_users

# Create Flask Blueprint object
user_pb = Blueprint(
    'user_pb',
    __name__,
    template_folder='templates',
    static_folder='strains/static'
)

@user_bp.route('/users', methods=['GET'])
def users():
    return get_users()
代码语言:javascript
复制
# posts/routes.py

# import 
from Flask import Blueprint
from users.posts import get_posts

# Create Flask Blueprint object
post_pb = Blueprint(
    'post_pb',
    __name__,
    template_folder='templates',
    static_folder='strains/static'
)

@user_bp.route('/posts', methods=['GET'])
def posts():
    return get_posts()
代码语言:javascript
复制
# posts/models.py

# import sql-alchemy db instance created with factory application
from blog_app import db


class Post(db.Model):
    """
    A simple model with a string based column 'content'.
    """
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.String(96), nullable=False)

    def __repr__(self):
        return f"post id: {self.id}"
代码语言:javascript
复制
# users/models.py

# import sql-alchemy db instance created with factory application
from blog_app import db


class User(db.Model):
    """
    A simple model with a string based column 'name'.
    """
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(96), nullable=False)

    def __repr__(self):
        return f"post id: {self.name}"

这些蓝图是帮助保持您的路线模块化的对象,以及我如何能够创建用户和邮政包,其中包含与应用程序特定部分相关的所有模块。例如,包将具有模型、与视图连接的url路由以及最终呈现动态HTML的模板。

烧瓶应用程序对象是使用在应用工厂功能中找到的blog_app/__init__.py创建的。

代码语言:javascript
复制
# blog_app/__init__.py

# Import package dependencies

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

# Global libraries
db = SQLAlchemy()
migrate = Migrate()


def create_app():
    """Initialize core application."""
    app = Flask(__name__, instance_relative_config=False)
   """
    Configure application from Config class in project-level 
    config.py module.
   """

    app.config.from_object('yourconfig.Config')

    # Initialize plugins
    db.init_app(app)
    migrate.init_app(app, db)

    with app.app_context():
        from blog_app.posts import routes as posts_routes
        from blog_app.users import routes as users_routes

        # Register Blueprints
        app.register_blueprint(posts_routes.post_bp)
        app.register_blueprint(users_routes.user_bp)

    return app

要从模板访问路由,请执行以下操作:

代码语言:javascript
复制
<a href="{{ url_for('posts_bp.posts') }}">Posts</a>
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28284365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档