iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Python

Python探索之旅:從基礎到實踐系列 第 21

DAY 21: 掌握 Web 框架——從 Flask 入門到 Django 初探

  • 分享至 

  • xImage
  •  

在現代 Web 開發中,框架的選擇對於開發效率和應用性能至關重要。Python 提供了多種強大的 Web 框架,其中 FlaskDjango 是最受歡迎的兩個選擇。今天,我們將深入了解這兩個框架,從建構一個簡單的 Flask 網站開始,然後進入 Django 框架的安裝與設置,理解其核心結構。


一、Flask 入門

Flask 是一個輕量級的 Web 框架,適合用於小型應用或快速原型開發。它的核心理念是簡單且可擴展,允許開發者根據需求自由添加功能。

1. 安裝 Flask

首先,我們需要安裝 Flask。建議使用虛擬環境來管理項目依賴。

# 創建虛擬環境(可選)
python -m venv venv

# 啟動虛擬環境
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate

# 安裝 Flask
pip install Flask
2. 建構一個簡單的 Flask 網站

接下來,我們將創建一個簡單的 Flask 應用,處理基本的路由。

# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "歡迎來到我的第一個 Flask 網站!"

@app.route('/about')
def about():
    return "這是關於頁面。"

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

說明:

  • Flask 類別初始化應用程式。
  • @app.route() 裝飾器用於定義路由。
  • home()about() 函式對應到不同的 URL 路徑。
  • debug=True 允許在開發過程中自動重載和顯示錯誤訊息。
3. 運行 Flask 應用

在終端中運行以下命令來啟動 Flask 伺服器:

python app.py

打開瀏覽器,訪問 http://127.0.0.1:5000/,你將看到「歡迎來到我的第一個 Flask 網站!」的訊息。訪問 http://127.0.0.1:5000/about,則顯示「這是關於頁面。」。

4. 渲染模板

Flask 支持使用模板引擎(如 Jinja2)來渲染 HTML 頁面,讓網頁更具動態性和可維護性。

步驟:

  1. 創建 templates 資料夾。
  2. templates 資料夾內創建 home.htmlabout.html 文件。

home.html

<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="UTF-8">
    <title>首頁</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <p>{{ message }}</p>
</body>
</html>

about.html

<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="UTF-8">
    <title>關於我們</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <p>{{ description }}</p>
</body>
</html>

修改 app.py 以渲染模板

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('home.html', title="首頁", message="歡迎來到我的第一個 Flask 網站!")

@app.route('/about')
def about():
    return render_template('about.html', title="關於我們", description="這是關於頁面。")

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

說明:

  • render_template() 函式用於渲染指定的 HTML 模板,並傳遞變數給模板。
  • 模板中的 {{ variable }} 語法用於插入動態內容。
5. 處理表單提交

Flask 也能夠處理表單提交,這對於用戶輸入和互動非常有用。

步驟:

  1. 創建一個表單模板 form.html

form.html

<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="UTF-8">
    <title>提交表單</title>
</head>
<body>
    <h1>提交你的資訊</h1>
    <form method="POST" action="/submit">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name" required>
        <br><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>
  1. 修改 app.py 以處理表單。
from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('home.html', title="首頁", message="歡迎來到我的第一個 Flask 網站!")

@app.route('/about')
def about():
    return render_template('about.html', title="關於我們", description="這是關於頁面。")

@app.route('/form')
def form():
    return render_template('form.html')

@app.route('/submit', methods=['POST'])
def submit():
    name = request.form.get('name')
    return f"感謝 {name} 的提交!"

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

說明:

  • 新增 /form 路由來顯示表單。
  • /submit 路由處理 POST 請求,獲取表單數據並回應。

二、Django 框架入門

Django 是一個高級的 Web 框架,提供了豐富的功能,如 ORM、管理後台、表單處理等,非常適合用於中大型應用的開發。相比 Flask 的輕量,Django 更加全面和結構化。

1. 安裝與設置 Django

步驟:

  1. 安裝 Django

同樣,建議在虛擬環境中安裝 Django。

pip install django
  1. 創建 Django 項目

使用 django-admin 工具來創建一個新的 Django 項目。

django-admin startproject myproject

這將創建一個名為 myproject 的目錄,包含以下結構:

myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
  1. 運行 Django 開發伺服器

進入項目目錄並啟動開發伺服器。

cd myproject
python manage.py runserver

打開瀏覽器,訪問 http://127.0.0.1:8000/,你將看到 Django 的歡迎頁面。

2. 理解 Django 的框架結構

Django 遵循「MTV」設計模式(Model-Template-View),這與傳統的 MVC 模式相似。

  • Model(模型):負責數據的處理和數據庫操作。
  • Template(模板):負責數據的呈現和前端界面。
  • View(視圖):負責處理業務邏輯,連接模型與模板。

核心文件說明:

  • manage.py:Django 的命令行工具,用於管理項目。
  • settings.py:配置項目設置,如數據庫、已安裝應用等。
  • urls.py:定義 URL 路由,將 URL 對應到視圖。
  • wsgi.pyasgi.py:用於部署應用的接口。
3. 創建 Django 應用

在 Django 項目中,一個應用(app)是項目的組成部分,負責特定的功能。

python manage.py startapp myapp

這將創建一個名為 myapp 的目錄,包含以下結構:

myapp/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

說明:

  • models.py:定義數據模型。
  • views.py:定義視圖函數或類。
  • admin.py:註冊模型到 Django 管理後台。
4. 配置應用

myproject/settings.py 中,將新創建的應用加入 INSTALLED_APPS 列表:

# myproject/settings.py

INSTALLED_APPS = [
    ...
    'myapp',
]
5. 定義 URL 路由

myapp 內創建一個 urls.py 文件,並定義應用的路由。

# myapp/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('about/', views.about, name='about'),
]

接著,在主項目的 urls.py 中包含應用的路由。

# myproject/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),
]
6. 定義視圖

myapp/views.py 中定義視圖函數來處理請求並返回響應。

# myapp/views.py

from django.http import HttpResponse
from django.shortcuts import render

def home(request):
    return HttpResponse("歡迎來到我的第一個 Django 網站!")

def about(request):
    return HttpResponse("這是關於頁面。")
7. 運行與測試

再次啟動開發伺服器:

python manage.py runserver

訪問 http://127.0.0.1:8000/,你將看到「歡迎來到我的第一個 Django 網站!」的訊息。訪問 http://127.0.0.1:8000/about/,則顯示「這是關於頁面。」。

8. 使用模板渲染

與 Flask 類似,Django 也支持使用模板來渲染 HTML 頁面。這有助於分離業務邏輯與前端呈現。

步驟:

  1. myapp 內創建 templates 資料夾,並在其中創建 home.htmlabout.html 文件。

home.html

<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="UTF-8">
    <title>首頁</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <p>{{ message }}</p>
</body>
</html>

about.html

<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="UTF-8">
    <title>關於我們</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <p>{{ description }}</p>
</body>
</html>
  1. 修改視圖以渲染模板:
# myapp/views.py

from django.shortcuts import render

def home(request):
    context = {
        'title': '首頁',
        'message': '歡迎來到我的第一個 Django 網站!'
    }
    return render(request, 'home.html', context)

def about(request):
    context = {
        'title': '關於我們',
        'description': '這是關於頁面。'
    }
    return render(request, 'about.html', context)

說明:

  • render() 函數用於渲染指定的模板,並傳遞上下文變數給模板。
  • 模板中的 {{ variable }} 語法用於插入動態內容。
9. Django 管理後台

Django 提供了一個功能強大的管理後台,讓你可以輕鬆管理應用的數據。

步驟:

  1. 創建管理員帳號
python manage.py createsuperuser

按照提示輸入用戶名、電子郵件和密碼。

  1. 註冊模型到管理後台

假設我們有一個簡單的模型 LotteryNumber

# myapp/models.py

from django.db import models

class LotteryNumber(models.Model):
    number = models.CharField(max_length=20)
    draw_date = models.DateField()

    def __str__(self):
        return f"{self.number} - {self.draw_date}"
  1. 進行數據庫遷移
python manage.py makemigrations
python manage.py migrate
  1. 註冊模型到 admin.py
# myapp/admin.py

from django.contrib import admin
from .models import LotteryNumber

admin.site.register(LotteryNumber)
  1. 訪問管理後台

啟動伺服器,並訪問 http://127.0.0.1:8000/admin/,使用剛創建的管理員帳號登錄。你將看到 LotteryNumber 模型,並可以在這裡添加、修改和刪除數據。


三、總結與展望

今天,我們深入探討了兩個強大的 Python Web 框架——Flask 和 Django。Flask 以其輕量和靈活性適合快速開發小型應用,而 Django 提供了全面的功能,適合中大型項目的開發。

學習重點回顧:

  • Flask:

    • 安裝與基本設置
    • 建構簡單的網站,處理路由
    • 使用模板渲染動態頁面
    • 處理表單提交
  • Django:

    • 安裝與項目創建
    • 理解 Django 的框架結構(MTV 模式)
    • 創建應用,定義 URL 路由
    • 使用模板渲染動態頁面
    • 設置並使用 Django 管理後台

展望未來:

接下來的學習中,我們可以進一步探索 Flask 的擴展功能,如資料庫整合(SQLAlchemy)、表單處理(WTForms),以及 Django 的更高級功能,如用戶認證、REST API 開發等。通過實踐和專案開發,將理論知識轉化為實際技能,成為一名高效的 Web 開發者。


透過今天的學習,我們已經建立了使用 Flask 和 Django 開發 Web 應用的基礎。無論是選擇輕量的 Flask 還是功能全面的 Django,都能夠滿足不同規模和需求的開發項目。持續練習並挑戰更複雜的專案,將幫助我們在 Web 開發領域中更上一層樓!


上一篇
DAY 20: 基礎網頁爬蟲與數據自動化的實踐
下一篇
DAY 22: 征服 Django——從零到全能的資料庫與 CRUD 應用開發之旅
系列文
Python探索之旅:從基礎到實踐27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言