flask02項目拆分

對flask項目進行簡單拆分:

修改成mvc模式:

  • 使用 flask-script 拓展將
    app.py 文件修改成manager.py

  • 修改項目結構:
    在這裏插入圖片描述

路由管理:

  • 直接將視圖寫到view.py 裏面是不會被加載到服務器的;
  • 並且相互導入文件但是不能出現循環引用。

要解決的問題是: views需要導入app對象,但是app對象又需要調用到views。

  • 故可以將app對象,放到app模塊中去實例化:

  • 最後將路由註冊方法單獨的 views文件的函數中。函數需要一個參數app然後在app模塊的init文件中,新建一個app對象的時候,將對象帶進去這個函數,那麼路由就會綁定到這個app對象上面

最後manager文件將這個app對象啓動。
也就是app這個對象,是在views.py文件或者說views模塊中的 creat_app()函數中 進行實例化,之後也可以採取放到 app模塊的init.py文件中去

  • 懶加載解決:
    缺點,不能夠讓views裏面的結構分文件顯示只能在一個文件裏面寫route
    通過參數的形式來傳遞。
  • 代碼後附上:
#views.py:

def init_route(app):

    @app.route('/')
    def hello_world():
        return 'Hello World!'

#init:
from flask import Flask
from App.views import init_route

def create_app():
    app = Flask(__name__)
    init_route(app)
    return  app

# manager.py

from App import create_app

app = create_app()

manager = Manager(app=app)

文件結構:

項目文件結構

路由管理更好的方法-藍圖

  • 路由的一種規劃,一種設計

  • flask-blueprint

  • bludeprint 使用出現問題。只要在文件裏面輸出參數 __name__就報錯

注意:名字定位錯誤。。。
結果: pycharm自動導包錯誤。
應該是:from flask import Blueprint

使用指南: 三種方法,推薦最後一種

  • 在views文件中定義一個 Blueprint對象,然後在app生成後註冊到app裏面。在新的blueprint對象下面寫路由。

  • 將views作爲模塊,在init.py文件中去引用其他文件,將其他文件生成的實例全部到init.py中引用:
    from .first_blue import blue
    依然還是在 app生成之後註冊。也就是在APP的init.py文件中註冊路由

  • 在views 模塊中新建init_views()函數,然後注入app對象,在views模塊的init.py文件中進行路由的註冊。

路由返回模版對象:

使用 return render_template(‘index.html’)方法返回模版對象;

傳參數到模版裏面:render_template(‘index.html’,msg=‘這是信息’)//key-value傳值。

關係型數據庫(ORM):

  • SQLALchemy //python都能用
  • 使用flask-SQLALchemy
  • 數據庫的uri:

數據庫+驅動://用戶名:密碼@主機:端口/具體哪一個庫

  • 使用 Sqlite:
    • SQLite是一種嵌入式數據庫,它的數據庫就是一個文件。由於SQLite本身是C寫的,而且體積很小,所以,經常被集成到各種應用程序中,甚至在iOS和Android的App中都可以集成。

Python就內置了SQLite3,所以,在Python中使用SQLite,不需要安裝任何東西,直接使用。

連接語句:

 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sqlite.db'

注意事項 第一次在pycharm中使用,要記得安裝驅動;
進行測試連接:
在這裏插入圖片描述

定義模型類:繼承db.Model

SQLAlchemy的對象 db操作數據庫的語法:

# 創建:
db.crete_all()

# 刪除:
db.drop_all()

#添加
db.session.add()
db.session.commit()

  • 換數據庫連接:使用mysql
  • 例如連接我的mysql:mysql+mysqlconnector://hhh:[email protected]:3306/hello

pycharm支持自己連接數據庫(輸入參數即可),可以少可開navicate去查看數據庫了。

注意事項

pycharm連接mysql之後,記得選擇schema文件。把自己的那個數據庫包括進去。不然看不到。

二級變化項目結構:setting.py,ext.py文件;

  • 將數據庫的配置和初始化放到 ext.py文件中
  • 項目設置放到setting.py文件中。
    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-BkXYZp1k-1580110984894)(img/flask02/flask02-2020-01-21-02-05-54.png)]

感悟:python只能一個主文件,慢慢去調用其他文件。

在此拆分之後:
之後就可以通過在route裏面寫業務邏輯然後去調用db對象進行數據庫操作。

可以在模型裏面 添加sava方法:具體使用過程:

   def save(self):
        db.session.add(self)
        db.session.commit()

終極拆分:

  • 適應公司開發,多套環境:

    • 開發環境:開發人員使用
    • 測試環境:測試人員使用
    • 演示環境:給產品看的,做演示,彩排
    • 生產環境:線上真實部署。
  • 將config 拿到setting.py文件中去:

    • 在其中定義基礎配置類,開發,測試配置類。get數據庫uri方法。
  • 然後給app添加config的時候,使用

app.config.from_object(envs.get('develop)')

env 裏面的develop變量可以從manager.py 傳入
將指定環境放到manage.py

//另外可以通過os.environ.get(‘FLASK_ENV’,‘develop’).實現通過電腦自動獲取 環境變量來指定環境

(其實也只是有點點用。。。)

  • 如果新建一個表,通過orm映射成表之後,想要添加屬性。或者說添加表的字段。 直接create_db 是不能更新表結構的。
  • 需要先 drop_db,在create才能更新表結構。

不能動態更新表;

數據庫遷移: flask-migrate擴展的使用

懶加載方式,需要db,app對象來進行初始化

migrate = Migrate()

def init_ext(app):
    db.init_app(app=app)
# 初始化管理者,需要app
    migrate.init_app(app,db)
  • 命令行結合 flask-scirpt 使用:
# 初始化
python manager.py db init

# 檢查表加表
python manager.py db migrate 

# 更新到數據庫
python manager.py db upgrade

到此爲止 對應java ssh

前端的 route 對應 寫接口,應該掉servece

model 也已經定義好了

servece 調用mapper (直接orm完成了)還沒搞好。

  • 項目結構圖:
    在這裏插入圖片描述

項目結構:
在這裏插入圖片描述

按照模塊拆分:

  • user模塊裏面 有mvc三種文件;
  • 每一個模塊裏面,都有三種文件:mvc v還是用的template
  • 可以把某一個模塊拎出來放在主目錄外面。(我不喜歡分模塊寫models,和views)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章