zoukankan      html  css  js  c++  java
  • 05解决flask循环引用的问题

    1, 什么是循环引用问题?为什么会导致循环引用?

    1.1先讲是什么?

    主文件中class类过多会导致主文件冗余,如下图,所以我们单独给class类一个文件,然后再引用它。

     

    1.2再讲为什么?

    主文件为models_sep.py文件,

     

    models.py文件为:

     

    可以看到,models.py文件要从主文件models_sep.py中引用生成的db,即“db = SQLAlchemy(app)”,在models.py中写完“class Article(db.Model):”后要被主文件models_sep.py引用回去,这时候回出现如下情况:

    
    
    这里为什么不能导入“Article”呢?因为:

    
    
    这就导致了循环引用。
    2,解决方案为,把db单独放个文件装起来:
    
    
     

     3,最后的效果为:

    #models_sep.py
    '''
    这里相当于把“class Article”模型之类的放在不同的py文件中。
    '''
    
    from flask import Flask
    from models import Article  #在hello_world会用到Article,所以需要引用,引用就会出错,所以需要这样写。
    from ext import db import config app = Flask(__name__) app.config.from_object(config) db.init_app(app) #这里“init_app”是专门为了解决循环引用的
    db.create_all()
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    
    if __name__ == '__main__':
        app.run()
    #ext.py
    from
    flask_sqlalchemy import SQLAlchemy db = SQLAlchemy()
    #models.py
    from
    ext import db class Article(db.Model): __tablename__ = "article" id = db.Column(db.Integer,primary_key=True,autoincrement=True) title = db.Column(db.String(100),nullable=False)
    # config.py
    #dialect+driver://username:password@host:port/database
    # dialect:是数据库的实现,比如MySql,SQLlite,且转换为小写
    # driver:对应的驱动,比如MySql的驱动是MySqldb
    # username:连接数据库的用户名
    # password:密码
    # host:连接数据库的域名
    # port:数据库监听的端口号
    # database:是连接的数据库的名字,创建数据库语句为:
    """create database db_demo1(database_name) charset utf8"""
    
    # 如果以上输出了1则说明SQLAlchemy能成功连接到数据库。
    
    DIALECT = "mysql"
    DRIVER = "mysqldb"
    USERNAME = "root"
    PASSWORD = '1234'
    HOST = "127.0.0.1"
    PORT = "3306"
    DATABASE = "xh"
    
    SQLALCHEMY_DATABASE_URI="{}+{}://{}:{}@{}:{}/{}".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
    """指定一个名为SQLALCHEMY_DATABASE_URI的固定变量,注意是固定的写法"""
    SQLALCHEMY_TRACK_MODIFICATIONS =False
    
    
  • 相关阅读:
    同样的代码bug
    Vim中的Tab
    在Vue中同时使用过渡和动画
    在Vue中使用animate.css
    Vue中的css动画
    动态组件与v-once指令
    在Vue中使用插槽
    非父子组件间的传值
    给组件绑定原生事件
    组件参数校验和非props特性
  • 原文地址:https://www.cnblogs.com/two-peanuts/p/10728445.html
Copyright © 2011-2022 走看看