Day08-Flask 或 Django 簡介:構建 Web 應用程序

Flask 或 Django 簡介:構建 Web 應用程序

網絡開發領域提供了豐富的工具和框架,而 Python 作為一門多功能的語言,在構建健壯且可擴展的 Web 應用方面脫穎而出。本課程將作為你使用 Python 進行 Web 開發的入門指南,特別聚焦于兩個流行的框架:Flask 和 Django。我們將探討這些框架背后的基本概念,為你創建動態 Web 應用和 RESTful API 奠定基礎。理解這些框架對于將 AI 模型集成到 Web 應用中至關重要,這是全棧 AI 開發的關鍵環節。

Web 框架簡介:Flask 和 Django

Web 框架為構建 Web 應用程序提供結構,簡化了路由、模板和數據庫交互等常見任務。它們提供預構建的組件和工具,使開發者能夠專注于應用程序的獨特功能,而不是重新發明輪子。Flask 和 Django 是兩個最流行的 Python Web 框架,每個都有其自身的優勢和適用場景。

Flask:一個微框架

Flask 通常被描述為一個微框架,因為它只提供了構建 Web 應用所需的必要工具和庫。它輕量級、靈活,并賦予開發者對其使用結構和組件的高度控制。

  • Flask 的主要功能:

    • 輕量級和靈活: Flask 的極簡設計允許開發者選擇他們需要的組件,使其非常適合小型項目或具有特定需求的應用。
    • 路由:?Flask 的路由系統允許你將 URL 映射到特定的函數,從而輕松定義應用程序的不同端點。
    • 模板化: Flask 使用 Jinja2 作為其默認模板引擎,允許您通過在模板中嵌入 Python 代碼來創建動態 HTML 頁面。
    • WSGI 兼容性: Flask 是一個符合 WSGI(Web 服務器網關接口)規范的框架,這意味著它可以在多種 Web 服務器上部署。
    • 可擴展:?Flask 的擴展系統允許您輕松地為應用程序添加功能,例如數據庫集成、身份驗證等。

    示例:?想象一下你正在構建一個簡單的個人網站。Flask 的輕量級特性讓你能夠快速為你的主頁、關于頁面和聯系表單設置路由,而無需承擔大型框架的額外負擔。

    反例:?如果你正在構建一個具有復雜用戶管理、訂單處理和產品目錄的大型電子商務平臺,與 Django 相比,Flask 可能需要更多的手動配置和外部庫的集成。

Django:一個功能完備的框架

Django 是一個高級的 Python Web 框架,為構建復雜的 Web 應用程序提供了一套全面的工具和功能。它遵循“開箱即用”的理念,為用戶認證、數據庫管理和表單處理等常見任務提供了內置組件。

  • Django 的主要功能:

    • ORM(對象關系映射器):?Django 的 ORM 允許你使用 Python 代碼與數據庫交互,抽象了 SQL 的復雜性。
    • 管理界面:?Django 會自動生成一個管理界面,用于管理應用程序的數據,使創建、讀取、更新和刪除記錄變得容易。
    • 安全特性:?Django 包含內置的安全特性,例如防范跨站腳本(XSS)、跨站請求偽造(CSRF)和 SQL 注入。
    • 模板引擎:?Django 有自己的模板引擎,它類似于 Jinja2,但有一些 Django 特有的功能。
    • 可擴展性:?Django 被設計用來處理大量的流量和數據,因此它適合構建可擴展的 Web 應用程序。

    示例:?考慮構建一個社交網站。Django 的內置用戶認證、數據庫管理和安全功能將顯著加快開發速度,并為復雜應用程序提供一個堅實的基礎。

    反例:?如果你正在創建一個功能簡單、單頁面的應用程序,Django 的豐富功能可能會過于繁瑣,而 Flask 可能是一個更合適的選擇。

在 Flask 和 Django 之間進行選擇

Flask 和 Django 之間的選擇取決于你項目的具體需求。

特性FlaskDjango
尺寸微型框架功能全面的框架
學習曲線初始學習更簡單學習曲線更陡峭
靈活性高度靈活,更多控制靈活性較低,更具主觀性
內置功能極簡,需要更多擴展許多內置功能
用例中小型應用程序,API大型復雜應用程序,內容管理系統

假設場景:?你需要構建一個簡單的 API 端點,從傳感器接收數據并將其存儲在數據庫中。Flask 的簡單性和靈活性使它成為這項任務的理想選擇。你可以快速設置一個路由,使用 SQLAlchemy(我們稍后會介紹)連接到數據庫,并處理數據。

設置開發環境

在開始使用 Flask 或 Django 構建 Web 應用程序之前,你需要設置一個開發環境。這通常涉及安裝 Python、創建虛擬環境以及安裝必要的包。

安裝 Python

如果你還沒有安裝 Python,可以從官方 Python 網站(https://www.python.org/downloads/)下載。確保下載最新版的穩定版 Python 3。

創建虛擬環境

虛擬環境是一個自包含的目錄,其中包含特定的 Python 解釋器以及為特定項目安裝的任何包。這有助于將您項目的依賴項與其他項目以及系統范圍的 Python 安裝隔離開來。

要創建虛擬環境,您可以使用 Python 3 自帶的?venv?模塊。

python3 -m venv venv

此命令在名為?venv?的目錄中創建一個虛擬環境。

要激活虛擬環境,請使用以下命令:

  • 在 macOS 和 Linux 上:

    source venv/bin/activate
    
  • 在 Windows 上:

    venv\Scripts\activate
    

虛擬環境激活后,您的 shell 提示符將帶有環境的名稱作為前綴(例如,(venv))。

安裝 Flask 或 Django

虛擬環境激活后,您可以使用 Python 包管理器 pip 安裝 Flask 或 Django。

  • 要安裝 Flask:

    pip install flask
    
  • 要安裝 Django:

    pip install django
    

構建一個簡單的"Hello, World!"應用程序

讓我們使用 Flask 和 Django 創建一個基本的"Hello, World!"應用程序,以說明每個框架的基本概念。

Flask “你好,世界!”

  1. 創建一個名為?app.py?的文件:

    from flask import Flaskapp = Flask(__name__)@app.route('/')
    def hello_world():return 'Hello, World!'if __name__ == '__main__':app.run(debug=True)
    

    解釋:

    • from flask import Flask: 從 flask 包中導入 Flask 類。
    • app = Flask(__name__): 創建 Flask 類的實例。__name__?參數是一個特殊的 Python 變量,表示當前模塊的名稱。
    • @app.route('/'): 這是一個裝飾器,告訴 Flask 哪個 URL 應該觸發我們的函數。在這種情況下,/?URL(根 URL)將觸發?hello_world()?函數。
    • def hello_world():: 當訪問?/?URL 時,這個函數會被調用。它返回字符串 ‘Hello, World!’,這個字符串將在瀏覽器中顯示。
    • if __name__ == '__main__':: 這是一個標準的 Python 慣用法,確保只有在腳本直接運行時(而不是作為模塊導入時)才會執行?app.run()?這一行。
    • app.run(debug=True): 啟動 Flask 開發服務器。參數?debug=True?啟用調試模式,提供有用的錯誤信息,并在你修改代碼時自動重新加載服務器。
  2. 運行應用程序:

    python app.py
    

    這將啟動 Flask 開發服務器。打開你的網頁瀏覽器并前往?http://127.0.0.1:5000/(或終端中顯示的地址)。你應該能看到"Hello, World!"消息。

Django “你好,世界!”

  1. 創建一個新的 Django 項目:

    django-admin startproject helloworld
    cd helloworld
    

    這會創建一個名為?helloworld?的新 Django 項目。

  2. 創建一個新的 Django 應用:

    python manage.py startapp hello
    

    這會創建一個名為?hello?的新 Django 應用。

  3. 編輯?helloworld/settings.py:

    在?INSTALLED_APPS?列表中添加?'hello'

    INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','hello',  # Add this line
    ]
    
  4. 創建一個名為?hello/views.py?的文件:

    from django.http import HttpResponsedef hello_world(request):return HttpResponse("Hello, World!")
    

    解釋:

    • from django.http import HttpResponse?: 導入?HttpResponse?類,該類用于向客戶端發送 HTTP 響應。
    • def hello_world(request):: 當我們下一步定義的 URL 收到請求時,這個函數會被調用。它接受一個?request?對象作為參數,該對象包含了關于請求的信息。
    • return HttpResponse("Hello, World!")?: 這行代碼創建了一個?HttpResponse?對象,其內容為字符串"Hello, World!",并將其返回。這將作為發送給瀏覽器的響應。
  5. 創建一個名為?hello/urls.py?的文件:

    from django.urls import path
    from . import viewsurlpatterns = [path('', views.hello_world, name='hello_world'),
    ]
    

    解釋:

    • from django.urls import path: 導入?path?函數,該函數用于定義 URL 模式。
    • from . import views: 從當前目錄(即?hello?應用)導入?views?模塊。
    • urlpatterns = [...]: 這個列表定義了?hello?應用的 URL 模式。
    • path('', views.hello_world, name='hello_world')?: 這行代碼定義了一個 URL 模式,將根 URL('')映射到?hello_world?視圖函數,該函數位于?views?模塊中。name?參數用于為 URL 模式命名,該名稱可用于在模板和其他代碼部分中引用它。
  6. 編輯?helloworld/urls.py:

    包含?hello?應用的 URLs:

    from django.contrib import admin
    from django.urls import include, pathurlpatterns = [path('admin/', admin.site.urls),path('', include('hello.urls')),  # Add this line
    ]
    

    解釋:

    • from django.urls import include, path?: 導入?include?函數,用于包含其他應用中的 URL 模式。
    • path('', include('hello.urls'))?: 這行代碼包含了在?hello/urls.py?文件中定義的 URL 模式。這意味著所有以?/?開頭的 URL 都將由?hello?應用處理。
  7. 運行遷移:

    python manage.py migrate
    

    此命令應用任何待處理的數據庫遷移。由于我們尚未定義任何模型,這將僅創建默認的 Django 表。

  8. 運行開發服務器:

    python manage.py runserver
    

    這將啟動 Django 開發服務器。打開你的網頁瀏覽器并前往?http://127.0.0.1:8000/。你應該能看到"Hello, World!"的消息。

路由和 URL 處理

路由是將 URL 映射到 Web 應用程序中特定函數或視圖的過程。Flask 和 Django 都提供了定義路由和處理 URL 參數的機制。

Flask 路由

在 Flask 中,你使用?@app.route()?裝飾器來定義路由。該裝飾器以一個 URL 模式作為參數,并將其與一個函數關聯起來。

from flask import Flaskapp = Flask(__name__)@app.route('/')
def index():return 'Index Page'@app.route('/hello')
def hello():return 'Hello, World'@app.route('/user/<username>')
def show_user_profile(username):# show the user profile for that userreturn f'User {username}'@app.route('/post/<int:post_id>')
def show_post(post_id):# show the post with the given id, the id is an integerreturn f'Post {post_id}'

解釋:

  • @app.route('/'): 將根 URL(/)映射到?index()?函數。
  • @app.route('/hello'): 將?/helloURL 映射到?hello()?函數。
  • @app.route('/user/<username>')?: 將類似?/user/john?或?/user/jane?的 URL 映射到?show_user_profile()?函數。<username>?部分是一個變量,將被作為參數傳遞給函數。
  • @app.route('/post/<int:post_id>')?: 將類似?/post/123?或?/post/456?的 URL 映射到?show_post()?函數。其中?<int:post_id>?部分是一個變量,它將被作為整數參數傳遞給該函數。而?int:?部分則指定該變量應為整數。

Django URL 處理

在 Django 中,你使用?urls.py?文件中的?path()?函數來定義 URL 模式。path()?函數接受一個 URL 模式、一個視圖函數和一個可選的名稱作為參數。

from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),path('hello/', views.hello, name='hello'),path('user/<str:username>/', views.show_user_profile, name='show_user_profile'),path('post/<int:post_id>/', views.show_post, name='show_post'),
]

解釋:

  • path('', views.index, name='index')?: 將根 URL(/)映射到?index?視圖函數。
  • path('hello/', views.hello, name='hello')?: 將?/hello/URL 映射到?hello?視圖函數。
  • path('user/<str:username>/', views.show_user_profile, name='show_user_profile')?: 將類似?/user/john/?或?/user/jane/?的 URL 映射到?show_user_profile?視圖函數。其中?<str:username>?部分是一個變量,將被作為字符串參數傳遞給該函數。
  • path('post/<int:post_id>/', views.show_post, name='show_post')?: 將類似?/post/123/?或?/post/456/?的 URL 映射到?show_post?視圖函數。?<int:post_id>?部分是一個變量,它將被作為整數參數傳遞給該函數。

模板化

模板化允許您通過在模板中嵌入 Python 代碼來創建動態 HTML 頁面。Flask 和 Django 都有自己的模板引擎。

Flask 模板(Jinja2)

Flask 使用 Jinja2 作為其默認模板引擎。Jinja2 允許你在模板中使用變量、循環和條件語句。

  1. 在您的?templates?文件與?app.py?文件相同的目錄下創建一個名為?templates?的目錄。

  2. 在?templates?目錄下創建一個名為?index.html?的文件:

    <!DOCTYPE html>
    <html>
    <head><title>Flask Template Example</title>
    </head>
    <body><h1>Hello, {{ name }}!</h1><p>Welcome to my website.</p>
    </body>
    </html>
    

    解釋:

    • {{ name }}: 這是一個 Jinja2 變量,它將被從 Python 代碼中傳遞過來的?name?變量的值所替換。
  3. 修改你的?app.py?文件:

    from flask import Flask, render_templateapp = Flask(__name__)@app.route('/template/<name>')
    def index(name):return render_template('index.html', name=name)if __name__ == '__main__':app.run(debug=True)
    

    解釋:

    • from flask import Flask, render_template?: 導入?render_template?函數,該函數用于渲染 Jinja2 模板。
    • return render_template('index.html', name=name)?: 這行代碼渲染了?index.html?模板,并將?name?變量傳遞給模板。
  4. 運行應用程序:

    python app.py
    

    打開你的網頁瀏覽器并前往?http://127.0.0.1:5000/template/John?。你應該能看到 “Hello, John!” 的消息。

Django 模板

Django 有自己的模板引擎,它類似于 Jinja2,但有一些 Django 特有的功能。

  1. 在你的?hello?應用目錄中創建一個名為?templates?的目錄。

  2. 在?templates?目錄下創建一個名為?index.html?的文件:

    <!DOCTYPE html>
    <html>
    <head><title>Django Template Example</title>
    </head>
    <body><h1>Hello, {{ name }}!</h1><p>Welcome to my website.</p>
    </body>
    </html>
    

    解釋:

    • {{ name }}: 這是一個 Django 模板變量,它將被從 Python 代碼中傳遞過來的?name?變量的值所替換。
  3. 修改你的?hello/views.py?文件:

    from django.shortcuts import renderdef index(request, name):return render(request, 'index.html', {'name': name})
    

    解釋:

    • from django.shortcuts import render?: 導入?render?函數,該函數用于渲染 Django 模板。
    • return render(request, 'index.html', {'name': name})?: 這行代碼渲染了?index.html?模板,并將?name?變量傳遞給模板。
  4. 修改你的?hello/urls.py?文件:

    from django.urls import path
    from . import viewsurlpatterns = [path('template/<str:name>/', views.index, name='index'),
    ]
    
  5. 運行開發服務器:

    python manage.py runserver
    

    打開你的網頁瀏覽器并前往?http://127.0.0.1:8000/template/John/?。你應該能看到 “Hello, John!” 的消息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87964.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87964.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87964.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

k8s多集群管理中的聯邦和艦隊如何理解?

在 Kubernetes 多集群管理中&#xff0c;聯邦&#xff08;Federation&#xff09;和艦隊&#xff08;Fleet&#xff09;是兩種不同的方法&#xff0c;用于管理和協調多個 Kubernetes 集群。下面是對這兩種方法的詳細解釋&#xff1a; 聯邦&#xff08;Federation&#xff09; K…

Docker部署MySQL鏡像

1.拉取鏡像 # 拉取指定版本的MySQL鏡像 docker pull mysql:8.02.創建掛載目錄 # 自己創建好如下三個文件夾 路徑任意 [rootiZuf6aigs7rxe6f6oifq7vZ mysql]# ll 總用量 12 drwxr-xr-x 2 root root 4096 7月 7 10:25 config drwxr-xr-x 2 root root 4096 6月 26 16:43 data d…

【網絡】Linux 內核優化實戰 - net.ipv4.ip_local_reserved_ports

目錄一、參數作用二、默認值與格式三、典型應用場景四、配置方法五、注意事項六、查看當前配置在Linux系統的TCP/IP網絡配置中&#xff0c;net.ipv4.ip_local_reserved_ports 是一個關鍵內核參數&#xff0c;用于指定禁止系統自動分配的本地端口范圍。這些端口會被“預留”出來…

期待在 VR 森林體驗模擬中實現與森林的 “虛擬復現”?

VR 森林體驗模擬&#xff0c;無疑是科技與自然領域一次極具開創性意義的奇妙碰撞。它借助前沿的虛擬現實技術&#xff0c;以別出心裁、獨樹一幟的方式&#xff0c;為我們精心打造并帶來了一場前所未有的森林探索奇幻之旅 。?在教育領域&#xff0c;于中小學的自然科學課堂上&a…

Qt:QLabel、LCD Number、QProgressBar、QCalendarWidget

目錄 一、QLabel 1.屬性 2.設置文本格式 3.設置圖片 4.設置文本對齊方式 5.設置自動換行 6.設置縮進 7.設置邊距 8.設置伙伴關系 二、LCD Number 1.屬性 2.Qt僅允許主線程修改界面 三、QProgressBar 屬性 四、QCalendarWidget 屬性 一、QLabel 同樣的&#x…

打造可靠的云基礎架構:Azure 區域與可用性區域

隨著企業業務的全球化擴展和數字化轉型&#xff0c;可靠性已成為企業在選擇云平臺時的重要考量因素。Azure 作為全球領先的云計算服務提供商&#xff0c;通過區域&#xff08;Regions&#xff09;和可用性區域&#xff08;Availability Zones&#xff09;為企業構建高可用性、高…

訂單初版—1.分布式訂單系統的簡要設計文檔

大綱1.訂單系統核心業務流程2.Spring Cloud Alibaba在訂單業務中的落地方案3.面向分布式全鏈路故障設計的高可靠架構方案4.分布式訂單系統的技術棧與代碼規范1.訂單系統核心業務流程(1)生成訂單時序圖(2)支付訂單流程圖(3)取消訂單流程圖這里主要介紹生單和退款兩個核心鏈路&am…

【HarmonyOS】富文本編輯器RichEditor詳解

【HarmonyOS】富文本編輯器RichEditor詳解 一、前言 在信息化高速發展的今天&#xff0c;普通的文本容器&#xff0c;已經不能夠承載用戶豐富的表達欲。富文本展示已經是移動開發中&#xff0c;必備要解決的問題&#xff0c;在鴻蒙中&#xff0c;通過在系統層提供RichEditor控件…

【MySQL進階】在一臺機器上運行多個MySQL實例

目錄 1.使用MySQL Installer安裝MySQL實例 1.1.去官網下載MySQL Installer 1.2.停止mysql服務 1.3.為不同的版本指定不同的安裝目錄 2.配置不同版本的選項文件 2.1.修改數據目錄 2.2.修改基本目錄 2.3.修改端口號 2.4.設置?志?錄 2.5.配置臨時目錄 2.6.修改綁定地…

verilog中timescale指令的使用

1.timescale指令格式timescale <時間單位> / <時間精度>時間單位&#xff1a;它確定了仿真中時間值的基本單位。比如 1ns 就意味著時間值是以納秒為單位來計量的。 時間精度&#xff1a;該參數決定了時間值能夠表示的最小分辨率。例如 1ps 表示時間可以精確到皮秒級…

08_Excel 導入 - 用戶信息批量導入

08_Excel 導入 - 用戶信息批量導入 1. VO 類 java復制編輯Data AllArgsConstructor NoArgsConstructor public class UserInfoBatch4ExcelReq {ExcelProperty(value "用戶姓名")Schema(description "用戶姓名")private String userName;ExcelProperty(va…

【深度學習新浪潮】什么是世界模型?

世界模型(World Model)是人工智能領域中一類通過構建環境的抽象表示來理解和預測外部世界的系統。它通過整合多模態數據(如視覺、語言、傳感器信號)形成對環境的動態認知,并支持智能體在復雜場景中進行決策與規劃。以下從核心概念、解決的問題、關鍵研究、技術路線、現狀與…

React + Express 傳輸加密以及不可逆加密

一、傳輸加密這里用 對稱加密模式 ASE實現。React 前端const CryptoJS require("crypto-js");// 示例1&#xff1a;ECB模式&#xff08;無需IV&#xff09; const encryptECB (plainText, key) > {return CryptoJS.AES.encrypt(plainText, key, {mode: CryptoJS…

瀏覽器(Chrome /Edge)高效使用 - 內部命令/快捷鍵/啟動參數

今天在CSDN上傳文件,提交總是提示續傳失敗,重試了五六次才想到獲取是科學上網的問題,這個時候其實只要重啟瀏覽器即可,但如果手動關閉瀏覽器再次打開,瀏覽器不會恢復之前的多開窗口(會恢復最后一個窗口內多開的標簽頁,但不會恢復其他窗口)。想了想記得 Chrome 流行的時…

【PTA數據結構 | C語言版】連續子序列最大和

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄 題目代碼 題目 給定 n 個整數組成的序列 { a1 ,a2 ,?,an }&#xff0c;“連續子序列”被定義為 { ai ,ai1 ,?,aj }&#xff0c;其中 1≤i≤j≤n。“連續子序列最大和”則被定義為所有連續子序列元素的和中最大…

Vrrp配置和原理

Vrrp配置和原理 文章目錄Vrrp配置和原理概述物理與邏輯拓撲重點vrid虛擬路由器虛擬IP地址及虛擬MAC地址超時時間計算-MASTER_DOWNvip 管理員手動指定方法Master路由器Backup路由器PriorityVRRP報文格式VRRP狀態機從Backup到masterVRRP協議狀態二.優先級一樣比較接口IPVRRP優先級…

可編輯59頁PPT | 某大型集團人工智能數字化轉型SAP解決方案

薦言摘要&#xff1a;某大型集團人工智能數字化轉型中&#xff0c;SAP解決方案扮演著智能中樞角色&#xff0c;深度融合AI技術與核心業務場景&#xff0c;破解傳統系統“數據孤島流程僵化”雙重困局。針對集團跨產業、多業態特點&#xff0c;方案以SAP S/4HANA為數據底座&#…

【RK3568 驅動開發:實現一個最基礎的網絡設備】

RK3568 驅動開發&#xff1a;實現一個最基礎的網絡設備一、引言二、編寫網絡設備驅動代碼1. 核心數據結構與接口2. 核心功能實現3. 網絡命名空間管理4.源代碼三、編譯與驗證1.加載模塊2.驗證網絡四、注意事項一、引言 RK3568 作為一款高性能 ARM 架構處理器&#xff0c;廣泛應…

CAIDCP系列對話:AI 驅動安全

數字時代&#xff0c;AI浪潮翻涌&#xff0c;網絡安全攻防戰已悄然升級&#xff1a; 某工業控制系統遭AI驅動勒索攻擊&#xff1a;攻擊者借 AI 精準捕捉異常網絡掃描、遠程 PowerShell 痕跡&#xff0c;瞬間加密文件索要贖金&#xff1b; 另一邊&#xff0c;某大型科技公司用AI…

ARMv8 沒開mmu執行memset引起的非對齊訪問異常

最近在haps上驗證一個新的芯片&#xff0c;記錄一下memset訪問出錯的問題。在沒開mmu和cache的情況下&#xff0c;對全局變量指針進行memset清零操作&#xff0c;發現每次都會出現異常。最后發現是沒開mmu導致出現了數據非對齊訪問導致報錯。排查EC區域發現是0x25&#xff0c;產…