參考:flask官網
這邊其實也是在閱讀公司的python-web項目的時候,做了一點小小的重構,之前的程序只有一個index.py文件,所有的接口基本都雜糅在裏面
這邊的重構處理,做了層次的改變,引入了flask的BluePrint,也遇到了很多沒引入BluePrint時候的問題。這邊會給出問題和解決方案
1、目錄結構
可以看到,其實這邊也是根據flask官網的介紹,去做了這樣一個結構的劃分,分模塊這種東西其實是見仁見智的。
2、啓動方法
我們這邊主要的啓動函數就是main,因爲引入了flask,所以可以通過創建一個Flask對象來輕鬆的進行程序的啓動,端口監聽等,關於Flask的安裝可以參考:flask安裝,在windows下面安裝相對來說簡單很多。
main函數主要做了幾個事情呢,包括我們看到的坑,來看一下main函數:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/3/20 15:59
# @Author : huangzj
# @Description 把之前index的啓動添加到main中
from flask import Flask
from flaskr.route import register_blue_print
def init_db_conf():
//.....機密省略
return 0
😡 # 這邊我們改變了層級結構,template_folder默認是去查找templates目錄的,這邊改成外層的templates目錄
app = Flask(__name__, template_folder='../templates', static_folder='../static')
app.jinja_env.auto_reload = True
😍 register_blue_print(app)
a = init_db_conf()
if __name__ == '__main__':
app.run(
host='127.0.0.1',
port=8083,
debug=True
)
我們看到這邊有兩個表情的地方就是比較重要的我們需要關注的地方:
- 😡 這個地方,我們可以看到是初始化一個Flask對象,並且設置了他的兩個屬性,爲什麼呢?因爲我們的目錄層級發生了改變,main.py和之前的位置有所區別,static和template相對它位置也變化了,所以我們這邊重新設置了他們的位置
- template_folder:templates的相對路徑(相對當前初始化文件)
- static_folder:static的相對路徑(相對當前的初始化文件)
然後我們來看一下😍這個地方,是註冊了我們聲明的藍圖,後面一個文章中會有介紹,這邊就不多說廢話了
3、循環引用
可以參考:flask解決循環引用
其實循環引用這個問題其實不是很大,不知道爲什麼go和python不支持循環引用,有的說好像是因爲初始化效率的考慮,這一點感覺java這個做的還是比較細節的。
什麼是循環引用,就當前這個應用,用一張圖來說名問題,其實如果程序規劃到位的話,正常是不會出現循環引用的問題,但是這邊的話,我也沒想到更好的規劃方式,先這樣把.
話不多說,上面文章所說的解決循環引用的方法,大致可以參考,這邊採用最簡單的方式,就是在def函數的時候,在函數中做import來處理,破壞循環引用。
4、引入藍圖
參考我的另一個文章:python-web框架flask:引入藍圖和遇到的問題