Python Flask 概念與實作(一) - Flask model運用
前言
在Flask中有需多實用的model,在之後的實作我們也會使用到,這小節會介紹許多model,若之後有使用到其他的model我盡量也會補充進來。
目前 Python Flask 概念與實作 大致規劃為
在開發過程中,Test(測試)其實也很重要,但礙於缺乏經驗,若之後有望的話再補上(專案打包、網站優化等等亦同)
Flask model
在上一節佈置環境當中,我們建立一個flask-tutorial專案,在這節中我們會沿用這些檔案
Debug
礙於每次改程式時都要先重啟server實在太麻煩,因此我們在開發時會使用debug模式,當程式碼更改時會自動重新運行!
1 | flask --app helloFlask run --debug |
Tips
若是將run寫在檔內,也可開啟debug模式
1
2
3
4
5
6
7
8
9
10
11 # helloFlask.py
from flask import Flask
app = ...
# 省略
if __name__ == '__main__':
app.run(debug=True)
# 若想指定port也在"run"中設定
# app.run(debug=True, prot=4500)
route
上一節所定義的route中,也可以輸入變數,其中變數使用<>包圍起來,且預設型態是sting
1 | from flask import Flask |
| string | 不包含"/"的字串 |
| int | 整數 |
| float | 浮點數 |
| path | 可包含"/"的字串 |
url_for & redirect
輸入已定義的函數名稱,url_for可以返回對映整理好的URL。而redirect會重新導向輸入的URL。
1 | # 引入 url_for, redirect |
render_teplate
1 | from flask import Flask |
在上述這個例子,我們將This is Home page.寫在helloFlask.py當中,但隨著我們專案越來越大,將所有程式碼寫在同一個檔案中會造成難以閱讀、維護的問題。因此,通常我們會將.html存放在/templates以利Flask存取。而render_teplate可以引入這些在/templates中的.html
- 在
/flask-tutorial中新增/templates資料夾 - 在
/templates中新增index.html1
2
3<h1>This is Home page.</h1>
<!-- 這裡使用Jinja2語法,之後會再做介紹 -->
Welcome, {{name}} - 修改
helloFlask.py1
2
3
4
5
6
7
8
9# helloFlask.py
# 引入 render_template
from flask import Flask, render_template
app = Flask(__name__)
def home(name):
return render_template("index.html", name=name)
目前專案結構會是這樣
TreeFlaskTutorial
在瀏覽器中輸入http://127.0.0.1:5000/home/MC時會自動導入變數MC
WelcomeMC
request
在Internet Protocol Suite(網路協定)中有說到Client有許多種型態的request,在route中也可以設定收到不同的request回覆不同的動作
- 修改
index.html1
2
3
4
5
6
7
8
9<!-- index.html -->
<h1>This is Home page.</h1>
Welcome, {{name}}
<!-- 新增form表格, request方式為"post" -->
<form method="post">
<!-- 設定email變數名稱為"user_email" -->
email: <input type="email" name="user_email">
<button type="submit">submit</button>
</form>HomePage
- 修改
helloFlask.py1
2
3
4
5
6
7
8
9
10
11
12
13# helloFlask.py
# 引入 render_template, request
from flask import Flask, render_template, request
app = Flask(__name__)
# route可決定指定request種類
def home(name):
if request.method == "POST":
# 返回client傳送的email
return "Flask server requested email: " + request.values["user_email"]
return render_template("index.html", name=name)HomePageRequest
session
暫時略過,之後補充😅
結論
- 開啟Debug模式,方便隨時更改code
- route讓client在URL中也能輸入參數
- url_for可找到已定義的函數名稱,並整理成URL格式
-
redirect會重新導向輸入的URL - render_teplate可套用
/templates中的.html - request可處理client的請求
- session待更新❗️
-
Jinja2語法待更新❗️