Flask打造個(gè)人博客系列,今天是第一篇,我們?cè)敿?xì)講解登錄赊琳,注冊(cè)模塊街夭。
既然是Flask來(lái)開(kāi)發(fā),你得:
- 安裝
pip install Flask
- 實(shí)現(xiàn)最簡(jiǎn)單的一個(gè)hello word:
views.py
@app.route("/")
def hello():
return "Hello World!"
run.py
from flask import Flask
app = Flask(__name__)
if __name__ == "__main__":
app.run(debug=True)
在terminal里輸入python run.py, 現(xiàn)在在瀏覽器打開(kāi)http://127.0.0.1:5000, 看看發(fā)生了什么躏筏?:)
很簡(jiǎn)單吧板丽?貌似第2部分點(diǎn)陌生:
@app.route是什么鬼?它正是用于在Flask應(yīng)用中給視圖函數(shù)設(shè)定路由URL的裝飾器趁尼。一頭霧水埃碱?裝飾器是什么? WTF酥泞?
Python裝飾器讓我們可以用其他函數(shù)包裝特定函數(shù)砚殿。 當(dāng)一個(gè)函數(shù)被一個(gè)裝飾器"裝飾"時(shí),那個(gè)裝飾器會(huì)被調(diào)用婶博,接著會(huì)做額外的工作瓮具,修改變量,調(diào)用原來(lái)的那個(gè)函數(shù).
視圖凡人, 路由又是啥玩意名党,簡(jiǎn)單解釋下:

上面的@app.route就等價(jià)于圖中的Routes部分。@app.route('/')就是注冊(cè)了一個(gè)路由(注冊(cè)路由就是建立URL規(guī)則和處理函數(shù)之間的關(guān)聯(lián)挠轴。Flask框架依賴于路由 完成HTTP請(qǐng)求的分發(fā))传睹。這樣當(dāng)你訪問(wèn)“/”這個(gè)path的時(shí)候,python就自動(dòng)把要它聯(lián)系到hello()這個(gè)function上岸晦,controller處理完后就會(huì)返還給你欧啤。
現(xiàn)在我們知道了,視圖函數(shù)hello既然可以返回hello word启上, 那么我們也可以定義其他視圖函數(shù)來(lái)返回注冊(cè)和登錄頁(yè)面邢隧。
代碼示意如下:
views.py

views.py這段代碼作用就是你在url里輸入 “127.0.0.1:5000/login后,flask會(huì)找到login對(duì)應(yīng)的函數(shù)冈在,處理后返回login.html中的內(nèi)容倒慧。那么, login.html 里有哪些內(nèi)容呢包券?
templates/login.html

HTML我們都會(huì)寫一點(diǎn), 但是{}是什么符號(hào)起什么作用呢纫谅?
因?yàn)镻ython直接寫html太麻煩,于是Flask 內(nèi)置了 Jinja2 模板引擎溅固,幫你更方便的寫html付秕。你可以在這個(gè)模板里使用變量或者表達(dá)式,當(dāng)這個(gè)頁(yè)面顯示的時(shí)候侍郭,變量或者表達(dá)式的值就會(huì)填充到你HTML頁(yè)面相應(yīng)的部分询吴,這個(gè)變量或者表達(dá)式的值是從哪里取來(lái)的呢?當(dāng)然是從你flask程序里.
一般Flask 會(huì)在 templates 文件夾里尋找模板亮元。所以汰寓,你只需要用HTML寫兩個(gè)頁(yè)面login.html 和signup.html,然后放到根目錄下的templates文件夾下就可以了苹粟。flask會(huì)自己找到這兩個(gè)頁(yè)面并渲染有滑。
下面簡(jiǎn)述下如何使用inja2模板來(lái)寫html頁(yè)面.
1.安裝:```python
pip install Jinja2
2.使用:如上的HTML。 介紹兩個(gè)常用的變量標(biāo)志符:
{% ... %} for Statements嵌削,例如上文的for循環(huán)語(yǔ)句毛好。
{{ ... }} for Expressions to print to the template output, 例如上文的
{{ form.username }}苛秕,{{ form.password }}.
我們知道登錄的時(shí)候肌访,需要輸入用戶名和密碼,點(diǎn)擊登錄按鈕艇劫,這個(gè)通常放到表單里來(lái)做吼驶,那么點(diǎn)擊登錄會(huì)發(fā)生什么呢?
表單里用戶名和密碼的內(nèi)容會(huì)提交到程序后端處理,對(duì)于Flask來(lái)說(shuō)蟹演,它使用Flask-WTF來(lái)自動(dòng)化表單的操作风钻, 我們來(lái)看看如何處理表單:
1. 安裝
```python
pip install Flask-WTF
- forms.py

表單定義好后,需要配合視圖使用酒请, 也就是我們?cè)趘iews.py的文件頭里骡技,加上:
from forum_app.forms import LoginForm
這樣你在瀏覽器里輸入 http://127.0.0.1:5000/login
,就會(huì)轉(zhuǎn)到login頁(yè)面羞反,輸入用戶名密碼布朦,提交,就會(huì)走login這個(gè)視圖函數(shù)的邏輯了≈绱埃現(xiàn)在再回去看下views.py是趴,你會(huì)發(fā)現(xiàn)
get_member_id_by_username(username)
這個(gè)是什么呢?就是后端的代碼邏輯了澄惊,此處為了從數(shù)據(jù)庫(kù)里根據(jù)用戶名找到用戶id右遭。這個(gè)需要用到SQLAlchemy這個(gè)庫(kù),我之前寫過(guò)相關(guān)的文章缤削,點(diǎn)擊這里查看SQLAlchemy用法窘哈。
通過(guò)這種方法Jinja2 用來(lái)寫前端頁(yè)面templates, Views用來(lái)處理url綁定和視圖亭敢,wtf-forms用來(lái)簡(jiǎn)化表單操作滚婉,F(xiàn)lask就這樣實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的注冊(cè)登錄。