1. 程式人生 > >第四章:FLASK結構拆分和循環引入問題

第四章:FLASK結構拆分和循環引入問題

瀏覽器 調試 seve 大量 __init__ 目錄 什麽 info com

一,上節回顧:

  1) flask 最小應用代碼。

from flask import Flask

app = Flask(__name__)

@app.route(‘/hello‘)
def hello():
    return ‘hello‘

if __name__ == ‘__main__‘:
    app.run()

  

  2) flask 路由實現

    @app.route(‘/‘) ,路由裝飾器,本質上是調用app.add_url_rule() 方法實現的路由規則

  3) flask 啟動參數

    host: 主機

    port:端口

    debug:是否開啟調試模式

  4) if __name__ == ‘__main__‘ 的理解

    在本文件中啟動 __name__ 就是 __main__

    如果是導入其他模塊 __name__ 就是 模塊的名稱

  5) 視圖函數和普通函數的區別?

    普通函數:可以返回字符串,字典,元組,整型等基本數據類型

    視圖函數:返回的是Response對象,包括但不限於狀態碼(status_code),返回類型(Content-type)等

二,flask結構化拆分。

  當我們有大量的業務代碼的時候,就不能在一個index.py中書寫了,因為這樣臃腫且不易維護,而且都把代碼放在一個文件中也不符合python之禪的精神,所以呢,我們需要對結構化進行一個拆分。

  一般情況下會拆分成以下結構:

test 工程目錄
    app                   #應用層
       config             #配置目錄
            __init__.py   #初始化文件
            secure.py     #機密配置
            setting.py    #普通配置
        libs              #庫目錄
            helper.py     #幫助方法模塊
            httper.py     #網絡請求模塊
            ...           #其他模塊
        models            #模型目錄
             __init__.py  #初始化文件
             model.py     #模型文件
        ...      #其他文件 web #藍圖1目錄 __init__.py #藍圖初始化文件 xxx.py #藍圖文件
        ...      #其他文件 api #藍圖2目錄 __init__.py #藍圖初始化文件 xxx.py #藍圖文件
        ...      #其他文件 cms #藍圖3目錄 __init__.py #藍圖初始化文件 xxx.py #藍圖文件
        ...      #其他文件 static #靜態文件夾 css #css文件夾 js #js文件夾 img #圖片 font #字體
        ...      #其他模塊 templates #模版文件夾 xxxx #業務目錄1 xxxx.html #業務模版 server.py 入口文件

  

  那麽我們現在開始進行結構化拆分之旅吧

    1. 增加config.py

    技術分享圖片

    2. 在server.py中引入config配置文件

      技術分享圖片

       啟動之後,debug調試模式開啟,端口號由默認的5000更改成8000了。這也就是說我們導入的配置文件有效。

     3. 在工程目錄下創建一個user.py 文件    

技術分享圖片

      技術分享圖片

      重新啟動後,調用瀏覽器 http://127.0.0.1:8000/user

      技術分享圖片

      為什麽會報404 Not Found 呢?是不是我們沒有在server文件中引入user.py呢?那我們在sever.py中引入user.py

      技術分享圖片

   瀏覽器訪問 http://127.0.0.1:8000/user

      技術分享圖片

      既然我在主文件中已經導入了user模塊,那為什麽還是不奏效呢? 這個就得從循環導入問題解決了,你覺得兩次的app是一樣的嗎?我們做一個實驗。

        在server.py中 打印app的id, print(‘實例化的app‘,id(app))

        在server.py中 main函數中打印 print(‘運行中的app‘,id(app))

        技術分享圖片

        在 user.py 中 打印 print(‘路由中的app‘,id(app))

        技術分享圖片

        運行之後:

          技術分享圖片

        事實說明flask實例化兩次,走路由的那次app最終沒有在main函數中執行,所以會報404錯誤。

         技術分享圖片

        

      

        

      

第四章:FLASK結構拆分和循環引入問題