flask 程序結構概括


 

以此結構為例,這個小項目是《Flask Web開發:基於python的web應用開發實戰》第一部分結束后的代碼框架

第一層

有app、tests、migrations三個文件夾和config.py、manage.py兩個py文件以及data-dev.sqlite、data-tests.sqlite兩個sqlite數據庫

  app文件夾下主要寫flask程序;
  migrations 文件夾包含數據庫遷移腳本;
  tests文件夾下編寫單元測試;

  config.py用來存儲配置

  manage.py 用於啟動程序以及其他的程序任務

  data-dev.sqlite是程序運行時所用的數據庫

  data-tests.sqlite是單元測試所使用的數據庫

  app層

  下面有main、static、templates三個文件夾以及__init__.py、email.py、models.py三個py文件

  main文件夾用來保存藍本,此文件夾下__inir__.py文件里面創建藍本,(  藍本和程序類似,也可以定義路由。不同的是,在藍本中定義的路由處於休眠狀態,直到藍本注冊到程序上后,路由才真正成為程序的一部分。)main文件夾下views.py用來保存程序的路由,errors.py用來處理錯誤,forms.py是存放表單定義

 

  static存放靜態文件

 

  templates用來存放響應的html文件,mail子文件里面的用來保存發送郵件所需的.html和.txt文件

 

  __inir__.py文件里面包含create_app()函數,已經app的各種初始化

  email.py包含send_email()發送文件函數(異步)

  models.py包含User和Role兩個表定義

  tests層

  test_basics.py用來編寫單元測試

應該還有一個venv文件夾用來包含虛擬環境和一個requirements.txt 文件,此文件列出了所有依賴包,便於在其他電腦中重新生成相同的虛擬環境

  

個人需掌握  

config.py中含有一個基類Config定義,三個繼承類定義DevlopmentConfig、TestingConfig、ProductionConfig和一個元組config

  manage.py中含有app 創建,manage、migrate初始化,以及make_shell_context()函數在命令行獲取上下文,避免頻繁導入還有test()函數,用來測試。

  app下__init__.py文件含有create_app()函數,部分代碼有

bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()


def create_app(config_name):  #創建app
    app = Flask(__name__)
    app.config.from_object(config[config_name])  #將配置類中的配置導入程序
    config[config_name].init_app(app)
    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)

    from .main import main as main_blueprint  #導入藍本main
    app.register_blueprint(main_blueprint)  #在主程序中注冊藍本


    return app

 

app.config.from_object(config[config_name]) 將配置類中的配置導入程序!!

在email中利用有這樣一行代碼

app = current_app._get_current_object() 

 

 current_app程序上下文!!!,理解有些模糊

 

在app/main/views下有一段代碼比較重要

@main.route('/',methods = ['POST','GET'])   #請求方式不管是post還是get都執行這個視圖函數
def index():
    form = NameForm()  #表單實例
    if form.validate_on_submit():   #提交按鈕是否成功點擊
         # 從數據庫中查找和表單數據一樣的數據,如果有,取第一個數據
        user = User.query.filter_by(username = form.name.data).first()
        if user is None:   #如果數據庫中沒有對應的數據
            user = User(username = form.name.data)  #在數據庫中對應的表中創建數據
            db.session.add(user)  #加入到用戶會話,以便數據庫進行提交
            session['known'] = False  #這是一個新用戶
            if current_app.config['FLASKY_ADMIN']:  #如果收件人已經定義,則調用發送郵件函數
                send_email(current_app.config['FLASKY_ADMIN'],'New User','mail/new_user',user = user)
                flash('The mail has been sent out')
        else:
            session['known'] = True  #這是一個老用戶
        session['name'] = form.name.data   #從表單獲取數據
        return redirect(url_for('.index'))
    return render_template('index.html',current_time = datetime.utcnow(),
                           form = form,name=session.get('name'),known

 

 

 

以上全是個人理解,初次接觸,學藝不精

2016-08-29

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM