初探 Flask

前言

Flask 是一個使用 Python 語言開發的輕量級 Web 應用框架,程式碼直觀、結構清晰,非常適合新手作為網頁開發的入門。以下我將就簡單的幾個範例說明,方便快速入門**。**

更詳細可參看: https://flask.palletsprojects.com/en/stable/

安裝所需套件

pip3 install flask

一個簡單版的 Flask 專案 範例

app.py

python 复制代码
from flask import Flask
from flask import request

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

if __name__ == "__main__":
    app.run(debug=True)

@app.route("/"): 路由(Routing)。這行程式碼告訴 Flask,當使用者瀏覽網站的首頁(/)時,就去執行下面的 hello_world() 函數,並把結果回傳給使用者的瀏覽器。

debug=True: 修改程式後自動重啟,發生錯誤時顯示詳細資訊

有關 Flask 基本流程

啟動

啟動網站有幾種方法

%flask --app app run

如果檔案名稱是 app.py 或 wsgi.py,則無需使用 --app 參數。

%flask run

%python3 app.py

執行結果

http://127.0.0.1:5000

接收網址參數

python 复制代码
略 ...

# 接收網址參數
@app.route("/user/<name>")
def user(name):
    return f"<h1>Hello {name}</h1>"

# 啟動 Server
if __name__ == "__main__":
    app.run(debug=True)

執行結果

HTTP 方法

在存取 URL 時會使用不同的 HTTP 方法(GET, POST . . .)

python 复制代码
略 ...

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # 當使用者填完表單按下送出 POST
        return do_the_login()
    else:
        # 當使用者第一次瀏覽網頁 GET
        return show_the_login_form()
    
    
def do_the_login():
    # 從前端 POST 提交的表單中獲取資料
    username = request.form.get('username')
    password = request.form.get('password')
    
    # 簡單的帳密驗證範例
    if username == "admin" and password == "123456":
        return f"<h1>登入成功!</h1><p>歡迎回來,{username}!</p>"
    else:
        return "<h1>登入失敗!</h1><p>帳號或密碼錯誤,請回上一頁重試。</p>"

# ===== 1. 顯示登入表單的頁面 =====
def show_the_login_form():
    # 回傳一個簡單的 HTML 表單,action 指向同一個路由,方法為 POST
    return '''
        <form method="post" style="margin: 50px; line-height: 2;">
            <h2>登入範例</h2>
            <label>帳號: </label>
            <input type="text" name="username" placeholder="請輸入 admin"><br>
            <label>密碼: </label>
            <input type="password" name="password" placeholder="請輸入 123456"><br>
            <button type="submit">登入</button>
        </form>
    '''
# 啟動 Server
if __name__ == "__main__":
    app.run(debug=True)

執行結果

渲染模板

使用Jinja2渲染 HTML 模板。我們可以使用 render_template() 函數動態地提供 HTML 文件,而不是在路由中傳回純字串。

login.html

html 复制代码
<!doctype html>
<title>登入範例</title>
<form method="post" style="margin: 50px; line-height: 2">
  <h2>登入範例</h2>
  <label>帳號: </label>
  <input type="text" name="username" placeholder="請輸入 admin" /><br />
  <label>密碼: </label>
  <input type="password" name="password" placeholder="請輸入 123456" /><br />
  <button type="submit">登入</button>
</form>

app.py

python 复制代码
from flask import Flask, render_template

略 ...

def show_the_login_form():
    # 回傳一個簡單的 HTML 表單,action 指向同一個路由,方法為 POST
    return render_template("login.html")

執行結果

Flask 與 REST API

python 复制代码
略 . . .

@app.route("/api/hello")
def hello():
    return {
        "message": "Hello API"
    }
    
@app.route("/api/users")
def users():
    data = [
        {
            "id": 1,
            "name": "Danny"
        },
        {
            "id": 2,
            "name": "Alice"
        }
    ]

    return data
    
# 啟動 Server
if __name__ == "__main__":
    app.run(debug=True)

執行結果

相关推荐
nice_lcj5207 分钟前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发
卷无止境8 分钟前
mathmodel-figure-templates 以及两个上手案例
后端·python
Moment9 分钟前
写给迷茫的应届生,怎样在 AI 时代争取更多机会
前端·后端·面试
回家路上绕了弯11 分钟前
为什么还是不能直接把需求丢给 AI?
后端
锋行天下1 小时前
服务器 Python 2.7 装不了 langgraph-cli?用本地生成 Dockerfile 曲线救国
人工智能·后端·python
一条大祥脚1 小时前
深入理解 PyTorch FlexAttention:从 Score Mod 到 Mask Mod 的稀疏加速之道
人工智能·pytorch·python·注意力机制·flex attention·可编程注意力
桦说编程1 小时前
TransmittableThreadLocal 解读:从 CRR 机制到上下文所有权
java·后端·源码
喵个咪1 小时前
GoWind 拆解:全链 ID 类型体系——int64 定版与前端字符串化契约
前端·后端·go
2601_967980112 小时前
Python自动化办公:模块、库与样式调整教程
python·excel·自动化办公·openpyxl·样式调整
喵个咪2 小时前
GoWind CMS 拆解:发布审批——多级推进、逐级角色与全程留痕
前端·后端·go