天天看點

python flask項目結構_Flask----目錄結構

python flask項目結構_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()函數,部分代碼有

python flask項目結構_Flask----目錄結構

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

python flask項目結構_Flask----目錄結構

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

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

app = current_app._get_current_object()

current_app程式上下文!!!,了解有些模糊

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

python flask項目結構_Flask----目錄結構

@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

python flask項目結構_Flask----目錄結構