Python Web 開發庫 - 快速指南
Python Web 開發庫 - 介紹
每當使用者開啟任何網頁瀏覽器,例如 Google Chrome 或 Mozilla 並搜尋“Web 開發”時,數千個結果會在瞬間出現。是什麼讓這一切成為可能?Web 開發!它廣泛指與構建、建立和維護網站以透過內聯網或網際網路進行託管相關的工作。網站設計相關的工作包含多個領域:網頁程式設計、資料庫管理、網頁設計、網頁釋出等。
Web 開發包括所有影響網站執行的程式碼。我們可以將整個 Web 開發過程分為兩類:
- 前端
- 後端
儘管前端和後端 Web 開發肯定彼此不同,但它們也像是同一枚硬幣的兩面。一個完整的網站依賴於每一方面與另一方面作為單個單元有效地溝通和運作。前端和後端在 Web 開發中同樣重要。
應用程式的前端或客戶端是負責使用者在螢幕上直接體驗的所有內容的程式碼,從文字顏色到按鈕、影像和導航選單。以下是前端開發人員使用的一些常用技能和工具:
- HTML/CSS/JavaScript
- CSS 預處理器
- 框架
- 庫
- Git 和 Github
通常,應用程式的後端/伺服器端負責管理資料庫中的資訊並將這些資訊提供給前端。網站的後端由伺服器、應用程式和資料庫組成。一般來說,它涉及在訪問您的瀏覽器之前發生的一切。後端 Web 開發所需的工具包括:
程式語言 - Ruby、PHP、Python 等。
資料庫 - MySQL、PostgreSQL、MongoDB、Oracle 等。
為什麼選擇 Web 開發?
在當今世界,有多種選擇來推廣您的業務或技能並分享您的想法。其中一些是透過網站推廣、在市場上釋出原生應用程式等。建立新網站作為業務發展工具的趨勢正在全球迅速發展。但是,我們中的一些人可能沒有意識到網站在業務發展中所起的重要作用。
目前,許多初創企業正在努力在公開市場上確立自己的地位。然而,這也確實如此,他們中的大多數人未能獲得他們想要的那麼多目標受眾。一個主要原因是他們低估了一個功能齊全的網站為他們帶來業務的潛力。為業務或任何其他目的進行網站開發可能會非常富有成效。
讓我們來看一下網站開發對業務增長至關重要的幾個重要原因:
接觸您的受眾
線上網站可以接觸到最廣泛的受眾,並且不受限制於限制原生應用程式的平臺。檢視者或客戶可以輕鬆訪問,即從桌上型電腦/筆記型電腦到移動裝置,因為網站能夠透過 Web 瀏覽器顯示內容。
與原生應用程式相比,網頁瀏覽要簡單得多,因為它不需要使用者訪問其裝置上的應用商店或下載其應用程式(這可能包括訪問您的內容的一個或多個流程)。與原生應用程式相比,基於 Web 的應用程式的資料分發更加靈活和敏捷,因為沒有嚴格的應用商店要求和內容限制需要遵守。
另一個對 Web 開發非常有幫助的工具是利用 SEO 技術來定位您的受眾。
全天候訪問
如果企業主開發一個網站作為線上論壇或類似平臺,而不是為公司建立實體店面,那麼將有很大機會線上吸引更多受眾。這是因為大多數人都全天候連線到網際網路。
通常,人們更喜歡首先線上檢查最便捷的方式,然後再做決定。因此,如果企業主填寫產品的全部基本資訊,並確保以及時的方式將產品交付給客戶,那麼人們將更願意線上購買,而不是親自去商店。這也允許人們即使在一天中最不方便的時間也能訪問它。
便利性
一個功能齊全的網站為使用者提供了更大的優勢,他們可以隨時訪問並查詢所需內容。通常,如果使用者可以選擇線上獲取,他們會避免親自去商店。因此,如果您是一位精明的商人,您將更願意將您的產品或商店的所有詳細資訊都放在網站上以獲得業務,否則您可能無法獲得。
全球營銷
透過線上網站,您可以連結到社交論壇,並將您的產品/服務推銷給全球大量的受眾。透過這種方式,您可以定期在社交論壇上做廣告並分享您的作品,以獲得更多目標受眾。
可信賴的來源
線上入口網站是任何公司/組織最值得信賴的平臺。有時,官方網站甚至可以作為其唯一的辦公場所。考慮這樣一種情況,即難以訪問公司的實際位置。在這種情況下,您可以專注於他們的網站來克服這種擔憂。
簡而言之,透過開發網站,您可以通過幾次點選來推廣您的服務,並且可以吸引來自世界各地的消費者的注意力。公司的網站可以證明不僅可以在更短的時間內獲得業務,而且還可以吸引更大的受眾。
Python 框架
Python 是 Web 和應用程式開發人員中最受歡迎的語言之一,因為它非常重視效率和可讀性。有許多優秀的 Python Web 框架,每個框架都有其自身的特性和功能。
Django
在這裡,我們將概述 Django 框架的一些必要細節和功能。
類別 - Django 屬於全棧 Python 框架。
版本 - 最新版本 – 2.1 版,常用版本 – 1.8 版、1.6 版。
關於 - Django 由經驗豐富的開發人員構建,是一個高階 Python Web 框架,它允許快速、簡潔和務實的程式設計開發。Django 處理 Web 開發的大部分複雜性,因此您可以專注於編寫應用程式,而無需重新發明輪子。它是免費和開源的。
為了將物件對映到資料庫表,Django 使用 ORM,並且它用於從一個數據庫傳輸到另一個數據庫。
它幾乎與所有重要的資料庫相容,例如 Oracle、MySQL、PostgreSQL、SQLite 等。
業界有許多網站使用 Django 作為其後端開發的主要框架。
Django 的功能
這個 Python Web 框架的一些示例功能包括:
- URL 路由
- 身份驗證
- 資料庫模式遷移
- ORM(物件關係對映器)
- 模板引擎
Django 框架的官方網站是:https://www.djangoproject.com/
Flask
類別 - Flask 屬於非全棧框架。
版本 - 1.0.2 於 2018 年 5 月 2 日釋出
關於 - 它被歸類為微型框架,因為我們不需要任何特定的庫或工具。它沒有表單驗證或資料庫抽象層或任何其他元件,其中現有的第三方庫提供常用功能。但是,Flask 支援多個擴充套件,這些擴充套件擴充套件了應用程式的功能,就好像它們是在 Flask 本身中實現的一樣。存在用於物件關係對映器、表單驗證、上傳處理、各種開放式身份驗證技術和幾個常用框架相關工具的擴充套件。
Flask 的功能
- 整合的單元測試支援
- RESTful 請求分發
- 包含開發伺服器和偵錯程式
- 使用 Jinja2 模板
- 支援安全 Cookie
- 基於 Unicode
- 100% 相容 WSGI 1.0
- 廣泛的文件
- 與 Google App Engine 相容
- 可用的擴充套件以增強所需的功能
Web2py
類別 - Web2py 屬於全棧框架家族。
版本 - 2.17.1,於 2018 年 8 月 6 日釋出
關於 - Python 2.6、2.7 到 Python 3.x 版本。無需進一步依賴,它本身就是一個完整的包。應用程式的開發、資料庫管理、除錯、部署、測試和維護都可以透過 Web 介面完成,但這通常不需要。它是一個可擴充套件的開源框架,它自帶基於 Web 的 IDE,以及程式碼編輯器、一鍵式部署和偵錯程式。
Web2py 的功能
該框架附帶許多開發工具和內建功能,消除了開發人員的複雜性。
無需安裝和配置,易於執行。
支援幾乎所有主要的作業系統,例如 Windows、Unix/Linux、Mac、Google App Engine 和幾乎所有透過 Python 2.7/3.5/3.6/ 版本的 Web 託管平臺。
易於與 MySQL、MSSQL、IBM DB2、Informix、Ingres、MongoDB、SQLite、PostgreSQL、Sybase、Oracle 和 Google App Engine 通訊。
它可以防止最常見的漏洞型別,包括跨站點指令碼、注入漏洞和惡意檔案執行。
支援錯誤跟蹤和國際化。
多協議可讀性。
採用成功的軟體工程實踐,使程式碼易於閱讀和維護。
透過向後相容性確保以使用者為導向的改進。
Pyramid
類別 - Pyramid 是一個非全棧框架
版本 - 1.9.2,於 2018 年 4 月 23 日釋出
關於 − Pyramid是一個小型、快速、實用的Python Web框架。它是作為Pylons專案的一部分開發的。它採用類似BSD的許可證授權。它使真實的Web應用程式開發和部署更有趣、更可預測和更高效。
Pyramid 的特性
Python Pyramid是一個開源框架,具有以下特性:
簡潔性 − 任何人都可以開始使用它,無需任何預備知識。
極簡主義 − Pyramid開箱即用,只包含一些對幾乎所有Web應用程式都必不可少的工具,例如安全性、提供靜態資源(如JavaScript和CSS)以及將URL連線到程式碼。
文件 − 包含獨家且最新的文件。
速度 − 非常快速和準確。
可靠性 − 它的開發理念是保守和經過徹底測試的。如果測試不充分,則會被視為損壞。
開放性 − 它採用寬鬆的開放許可證。
Dash
類別 − Dash框架屬於“其他”Python Web框架。
版本 − 0.24.1,核心Dash後端。
關於 − Dash是一個用於建立互動式基於Web的視覺化的開源庫。Plotly團隊建立了Dash——一個利用Flask、React.js和plotly.js構建自定義資料視覺化應用程式的開源框架。這個庫的關鍵亮點是,你只需透過Python程式碼即可構建高度互動式的Web應用程式。資料科學家喜歡Dash框架,特別是那些不太熟悉Web開發的人。
使用Dash,開發者可以訪問所有可配置屬性和底層的Flask例項。使用Dash框架開發的應用程式可以部署到伺服器,並最終在Web瀏覽器中渲染。
Dash應用程式本質上是跨平臺的(Linux/Win/Mac)並且對移動裝置友好,並且可以透過豐富的Flask外掛擴充套件應用程式的功能。
Dash 的特性
- 提供對可配置屬性和Flask例項的訪問
- 透過Flask外掛,我們可以擴充套件Dash應用程式的功能
- 移動裝置就緒
Django 框架
在本章中,我們將詳細討論Django框架。
Django是一個MVT Web框架,用於構建Web應用程式。龐大的Django Web框架包含了大量的“內建電池”,開發者經常會驚訝於所有元件是如何協同工作的。新增這麼多“電池”的原則是將常見的Web功能包含在框架本身中,而不是以後作為單獨的庫新增。
Django框架流行的主要原因之一是龐大的Django社群。這個社群非常龐大,以至於專門為此建立了一個網站,來自世界各地的開發者都在這裡開發第三方包,包括身份驗證、授權、功能齊全的Django驅動CMS系統、電子商務附加元件等等。你想要開發的東西很可能已經被別人開發出來了,你只需要將其新增到你的專案中。
你為什麼要使用Django?
Django的設計鼓勵開發者快速、簡潔且以實用的方式開發網站。Django注重實際解決問題的做法使其脫穎而出。
如果你計劃構建一個高度可定製的應用程式,例如社交媒體網站,Django是最佳考慮的框架之一。Django的優勢在於其使用者之間的互動或共享不同型別媒體的能力。Django的一大優勢是它能夠利用大型社群支援,這為你提供了高度可定製的、可立即使用的第三方外掛。
以下是選擇Django進行Web開發的十大理由:
Python
Python可以說是最容易學習的程式語言之一,因為它具有簡單的語言結構、流程結構和簡單的語法。它用途廣泛,可以執行網站、桌面應用程式和嵌入在許多裝置中的移動應用程式,並且在其他應用程式中作為流行的指令碼語言使用。
內建電池
Django自帶了一些必要的庫,用於構建常見的功能,如URL路由、身份驗證、物件關係對映器(ORM)、模板系統和資料庫模式遷移。
內建管理員
Django有一個內建的管理介面,允許你處理你的模型、使用者/組許可權和管理使用者。有了模型介面,除了高階資料庫功能外,無需單獨的資料庫管理程式。
不會妨礙你
建立Django應用程式不會新增任何樣板程式碼和不必要的功能。不需要強制匯入、第三方庫和XML配置檔案。
可擴充套件性
Django基於MVC設計模式。這意味著所有實體,如資料庫(db)、後端和前端程式碼都是獨立的實體。Django允許我們將程式碼與構成站點的靜態媒體(包括圖片、檔案、CSS和JavaScript)分開。
Django支援完整的第三方庫列表,用於Web伺服器、快取、效能管理、叢集和負載均衡。Django提供的優勢之一是支援主要的電子郵件和訊息應用程式和服務,如REST和OAuth。
經受實戰考驗
Django於2005年首次開源。經過12年的發展,Django現在不僅執行新聞釋出網站,還執行Pinterest、Instagram、Disqus、Bitbucket、EventBrite和Zapier等主要全球企業的全部或部分業務。這使其成為一個強大可靠的Web框架。
強大的包支援
由於其龐大的社群支援和大量的開發者網路,你想要做的任何事情很可能以前已經有人做過。大量的國際開發者社群透過釋出他們的專案作為開源包來為社群做出貢獻。
Django包站點就是這樣一種專案庫。目前,Django包列出了3400多個可重用的Django應用程式、站點和工具,可用於我們的Django專案。
積極開發
與開源專案相關的最大風險之一是其可持續性。我們無法確定它能持續多久。
Django不存在這種風險,因為它已經12歲了。它持續釋出新版本,更新/更好的版本,活躍的社群每天都在壯大,還有一個龐大的核心志願者團隊每天都在維護和改進程式碼庫。
穩定的版本
像Django這樣的開源軟體專案在許多情況下都處於積極開發中,並且比競爭對手的專有軟體更安全,因為許多開發者每天都在開發和測試它。然而,開源軟體專案的缺點是缺乏穩定的程式碼庫來進行商業化開發。
在Django中,我們有軟體的長期支援 (LTS) 版本和一個定義明確的釋出流程,如下面的圖片所示:
一流的文件
從最初發布開始,Django開發者就確保必須提供適當的綜合文件,並且教程易於理解。
誰在使用Django?
由於Django獨特的優勢,許多流行的網站都是基於Python和Django框架構建的。以下是一些完全或部分基於Django構建的主要網站。
Disqus
它是全球最受歡迎的部落格評論託管網站之一。它很容易與大多數流行的CMS(內容管理系統)如WordPress以及許多其他系統整合。透過處理超過5000萬的使用者群,Django能夠滿足網站所有者與社群聯絡的需求。
洋蔥新聞 (The Onion)
洋蔥新聞網站為其諷刺新聞提供線上平臺,Django為其提供了框架。
Bitbucket
Bitbucket類似於GitHub,是一個版本控制儲存庫託管服務。Bitbucket和GitHub之間的唯一區別在於Bitbucket託管Mercurial儲存庫,而GitHub託管Git儲存庫。由於數百萬使用者與Bitbucket相關聯,並且Bitbucket提供的所有服務(如建立儲存庫、推送程式碼、新增協作者、提交、拉取請求等)都必須穩定。Django負責執行Bitbucket網站。
Instagram是一個社交網路應用程式,專門為那些喜歡與所有朋友分享照片和影片的人而構建。目前Instagram上有許多名人,以便更接近他們的粉絲。Django框架也在執行Instagram。
Mozilla Firefox
繼谷歌Chrome瀏覽器之後,世界上使用最廣泛的第二大瀏覽器是Mozilla瀏覽器。現在Mozilla的幫助頁面是用Django框架構建的。
全球數百萬使用者從Pinterest發現他們的新想法和靈感。Pinterest使用Django框架(根據其需求進行了修改)來執行它。
NASA
美國國家航空航天局的官方網站是數百萬使用者訪問和檢視該主要機構提供的新聞、影像、影片和播客的地方。Django開發了官方NASA網站的某些特定部分。
華盛頓郵報 (The Washington Post)
如果世界上有一家有影響力的報紙,那一定是華盛頓郵報。華盛頓郵報的網站是一個非常受歡迎的線上新聞來源,與他們的日報相輔相成。Django Web框架輕鬆處理了其巨大的瀏覽量和流量。
Reddit Gifts
廣受歡迎的Reddit網站推出一個名為Reddit Gifts的線上匿名禮物交換和聚會平臺。該網站連線世界各地的使用者,並促進他們之間的禮物交換。Django Web框架為其功能提供了支援。
Prezi
Prezi是基於Django框架構建的Microsoft PowerPoint的基於雲的替代方案。該網站提供了一個虛擬畫布,可以對其進行操作並進行放大和縮小。這提供了簡報的整體檢視,而不是單個幻燈片。
安裝和建立Django專案和應用
在安裝Django之前,我們必須確保已安裝Python。假設你使用的是virtualenv,簡單的pip install django就足夠了。
安裝虛擬環境和Django
以下是Windows環境中安裝虛擬環境和Django的過程:
要驗證Django是否已正確安裝,請鍵入以下程式碼:
建立Django專案
安裝完成後,我們需要建立一個Django專案。
在你的Windows機器上執行以下命令將建立以下Django專案:
django-admin startproject my_project_name
鍵入dir將顯示一個新檔案和一個新目錄,如上所示。
manage.py − manage.py是一個命令列可執行的Python檔案,它只是django-admin的包裝器。它幫助我們管理我們的專案,這在其名稱中也有暗示。
這樣,它就在myFirstDjangoProject內部建立了一個名為myFirstDjangoProject的目錄,該目錄表示我們專案的配置根目錄。讓我們更深入地探討一下。
配置Django
將myFirstDjangoProject目錄稱為“配置根目錄”,是指此目錄包含通常配置Django專案所需的檔案。此目錄之外的幾乎所有內容都將僅專注於與專案的模型、檢視、路由等相關的“業務邏輯”。所有將專案連線在一起的點都將指向這裡。
__init__.py − 此檔案為空,並將目錄更改為可匯入的Python包。
settings.py − 正如其名稱所示,這是設定大多數配置項的地方。
urls.py − URL 設定在 urls.py 檔案中。透過這個檔案,我們不必顯式地為專案中的每個 URL 都編寫程式碼。但是,我們需要告訴 Django 這些 URL 在哪裡宣告(即,我們需要在 urls.py 中連結其他 URL)。
wsgi.py − 這有助於在生產環境中執行應用程式,類似於 Flask、Tornado、Pyramid 等其他應用程式,它公開了一個“app”物件。
設定 settings
檢視 settings.py 檔案,你會發現它相當大——而這些僅僅是預設設定。我們還需要注意其他一些方面,例如靜態檔案、資料庫、媒體檔案、雲集成或 Django 專案可以配置的其他幾十種方式。讓我們瞭解 settings.py 檔案中提到的一些要點:
BASE_DIR − 這有助於定位檔案。在 settings.py 檔案中,BASE_DIR 引數設定專案根目錄的絕對路徑。
SECRET_KEY − 它用於生成雜湊值。通常,我們使用 secret_key 用於 cookie、會話、csrf 保護和身份驗證令牌。
DEBUG − 我們可以在開發模式或生產模式之間切換專案執行模式。
ALLOWED_HOSTS − 我們在此提供應用程式所服務的 hostname 列表。在開發模式下,設定此項是可選的;但在生產環境中,我們需要為 Django 專案設定它。
INSTALLED_APPS − 這是當前已安裝並在 Django 專案中執行的 Django “應用程式”列表。Django 自帶六個已安裝的應用程式,如下所示:
'django.contrib.admin'
'django.contrib.auth'
django.contrib.
django.contrib.sessions
django.contrib.messages
django.contrib.staticfiles
MIDDLEWARE − 它幫助我們的 Django 專案執行。它是一個 Python 類,可以連線到 Django 的請求/響應處理流程。
TEMPLATES − 它定義了文件應該如何在前端顯示。Django 模板用於生成任何基於文字的格式。
WSGI_APPLICATION − 我們設定的任何伺服器都必須知道 WSGI 檔案在哪裡。如果您使用的是外部伺服器,它將在其自身的設定中查詢。預設情況下,它指向 wsgi.py 中的物件。
DATABASES − 它設定了 Django 專案當前訪問的資料庫。必須設定預設資料庫。如果我們設定了我們選擇的資料庫,我們需要提及一些與資料庫相關的方面,例如:HOST、USER、PASSWORD、PORT、資料庫名稱和相應的 ENGINE。
STATIC_URL − 引用位於 STATIC_ROOT 中的靜態檔案時使用的 URL。預設情況下為 None。
但是,我們可能需要新增靜態檔案的路徑。轉到檔案末尾,在 STATIC_URL 條目下方新增一個名為 STATIC_ROOT 的新條目,如下所示:
myFirstDjangoProject/settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
設定資料庫
有很多不同的資料庫軟體可以儲存網站資料。我們將使用預設資料庫 sqlite3。
這已在您 myFirstDjangoProject/settings.py 檔案的以下部分中設定:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
要為我們的部落格建立一個數據庫,讓我們在控制檯中執行以下命令:python manage.py migrate(我們需要在包含 manage.py 檔案的 myFirstDjangoProject 目錄中)。
如果一切順利,您將看到以下輸出:
啟動 Web 伺服器
您需要在包含 manage.py 檔案的目錄中。在控制檯中,我們可以透過執行 python manage.py runserver 來啟動 Web 伺服器,如下所示:
現在您需要做的就是檢查您的網站是否正在執行。開啟您的瀏覽器(Firefox、Chrome、Safari、Internet Explorer 或您使用的任何瀏覽器)並輸入以下地址:
http://127.0.0.1:8000/
或
https://:8000/ # 因為我們的 Web 伺服器僅在我們本地機器上執行。
恭喜!您剛剛建立了您的第一個網站並使用 Web 伺服器執行它!
在 Web 伺服器執行期間,您不會看到新的命令列提示符來輸入其他命令。終端將接受下一行文字,但不會執行新命令。這是因為 Web 伺服器持續執行以監聽傳入的請求。
Django 模型
我們嘗試建立一個 Django 模型來儲存部落格中的所有帖子。但為了確保它能正常工作,我們需要了解物件。
物件
物件是屬性和動作的集合。讓我們用一個例子來理解這一點。假設我們想建模一隻貓,我們將建立一個名為 Cat 的物件,它具有顏色、年齡、情緒(好/壞/睏倦)和主人等屬性。
然後 Cat 有一些動作:呼嚕、抓撓或餵食。
Cat -------- color age mood owner purr() scratch() feed(cat_food) CatFood -------- taste
所以基本上我們試圖用屬性(稱為物件屬性)和動作(稱為方法)在程式碼中描述真實的事物。
由於我們正在構建一個部落格,我們需要一些文字內容和標題。還需要作者姓名、建立日期和釋出日期。
所以我們的部落格將具有以下物件:
Post -------- title text author created_date published_date
我們還需要一些釋出該帖子方法。既然我們已經知道什麼是物件,我們就可以為我們的部落格帖子建立一個 Django 模型。
模型是 Django 中一種特殊的物件,並儲存在資料庫中。我們將資料儲存在 SQLite 資料庫中。
建立應用程式
為了使一切清晰明瞭,我們將在專案中建立一個單獨的應用程式。下面,我們將嘗試透過執行以下提到的簡單命令來建立一個部落格 Web 應用程式。
現在我們會注意到建立了一個新的 myBlog 目錄,並且它現在包含許多檔案。專案中的目錄和檔案應該如下所示:
建立應用程式後,我們還需要告訴 Django 使用它。我們可以在 myFirstDjangoProject/settings.py 檔案中執行此操作。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myBlog', ]
建立部落格帖子模型
在 myBlog/models.py 檔案中,我們定義所有稱為模型的物件——這是我們將定義部落格帖子的地方。
讓我們開啟 myBlog/models.py,刪除其中的所有內容,並編寫如下程式碼:
首先,我們透過呼叫 from 或 import 從其他檔案中匯入一些功能。這樣,我們可以使用 from 和 import 包含某些部分,而無需在每個檔案中複製和貼上相同的內容。
class Post(models.Model) − 此行定義了我們的模型(它是一個物件)。
class 是一個特殊的關鍵字,表示我們正在定義一個物件。
Post 是我們模型的名稱。類名始終以大寫字母開頭。
models.Model 表示 Post 是一個 Django 模型,因此 Django 知道它應該儲存在資料庫中。
現在讓我們討論上面定義的屬性:標題、文字、建立日期、釋出日期和作者。為此,我們需要定義每個欄位的型別。
models.CharField − 這是如何定義具有有限字元數的文字。
models.TextField − 這是用於長文字,沒有限制。
models.DateTimeField − 這是用於日期和時間。
models.ForeignKey − 這是另一個模型的連結。
我們使用 def 定義一個函式/方法,publish 是方法的名稱。
方法通常會返回某些內容。在這裡,當我們呼叫 __str__() 時,我們將獲得包含帖子標題的文字(字串)。
在資料庫中為模型建立表
最後一步是將新模型新增到我們的資料庫。首先,我們必須讓 Django 瞭解我們對模型進行了一些更改。讓我們在控制檯視窗中使用命令 python manage.py make migrations myBlog 執行相同的操作,如下所示:
然後,Django 將準備一個遷移檔案,我們現在必須將其應用於我們的資料庫。在控制檯中,我們可以鍵入:python manage.py migrate myBlog,輸出應如下所示:
我們的 Post 模型現在在我們的資料庫中了。
Django Admin
為了新增、編輯和刪除我們剛剛建模的帖子,我們使用 Django admin。
因此,讓我們開啟 myBlog/admin.py 檔案並將以下內容放入其中:
首先,我們匯入(包含)上一章中定義的 Post 模型。為了使我們的模型在 admin 頁面上可見,我們需要使用 admin.site.register(Post) 註冊模型。
要登入到 admin 站點,您需要建立一個超級使用者——一個可以控制站點上所有內容的使用者帳戶。因此,停止 Web 伺服器並在命令列中鍵入 python manage.py createsuperuser,然後按 Enter 鍵。
好了,現在該檢視我們的 Post 模型了。記住在控制檯中執行 python manage.py runserver 來執行 Web 伺服器。轉到您的瀏覽器並鍵入地址 https://127.0.0.1:8000/admin/。 使用我們剛剛選擇的憑據登入。然後您應該看到如下所示的 Django admin 儀表板:
轉到帖子並嘗試一下。您可以新增許多部落格帖子和來自任何地方的內容。您的部落格將如下所示:
這只是 Django 的概述,我們只需幾行程式碼就可以建立一個部落格。
Flask 框架
Flask 是一個微框架,對外部庫的依賴性很小。它是一個非常輕量級的框架,讓我們可以自由地做任何事情。
在本章中,我們將使用 Python 和 Flask 框架構建一個專案。
Flask 啟動和配置
與大多數廣泛使用的 Python 庫一樣,Flask 包可從 Python 包索引 (PPI) 安裝。讓我們首先建立一個目錄(在本章中,我們建立了一個名為 flaskProject 的目錄),然後建立一個虛擬環境(並將其命名為 flaskEnv),所有專案相關的依賴項都將在此處載入(包括 flask)。您還可以安裝 flask-sqlalchemy,以便您的 Flask 應用程式可以輕鬆地與 SQL 資料庫通訊。
安裝 Flask 後,您的 flaskEnv(我們的虛擬環境名稱)將顯示如下所示:
使用 Flask 建立應用程式
透過安裝 Flask,我們可以使用很少的程式碼建立一個簡單的“Flask 中的 hello 應用程式”,如下所示:
在終端中鍵入以下內容:
$python flaskapp.py
您可以看到以下輸出:
正在運行於 http://127.0.0.1:5000/ 或 localhost:5000
以下是我們在示例程式碼中所做的操作的解釋:
首先,我們匯入 Flask 類庫。來自此類的例項是 WSGI 應用程式。
其次,我們建立此類的例項。應用程式包或模組名稱是我們的第一個引數。Flask 必須知道在哪裡找到靜態檔案、模板和其他檔案。
接下來是 route() 裝飾器,我們用它來確定哪個 URL 應該觸發我們的方法/函式。
建立 URL 路由
URL 路由使 Web 應用程式中的 URL 更易於記憶。我們現在將建立一些 URL 路由:
/hello /members /members/name
我們可以根據上述 URL 編寫以下程式碼,並將其儲存為 app.py。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return "Index!"
@app.route('/Hello')
def hello():
return "Hello, World!"
@app.route("/members")
def members():
return "Members"
@app.route("/members/<name>/")
def getMember(name):
return name
if __name__ == '__main__':
app.run(debug=True)
重新啟動應用程式後,我們使用以下幾行程式碼來獲取不同 URL 上的不同輸出:
$ python app.py
運行於 https://:5000/
我們在瀏覽器中將獲得以下輸出:
我們可以在瀏覽器中嘗試其他 URL,如下所示:
運行於 https://:5000/hello,將給出以下輸出:
運行於 https://:5000/members,將給出:
運行於 https://:5000/members/TutorialsPoint/,將給出以下輸出:
但是通常我們不想返回字串(如上所示),我們返回模板。為此,我們要使用 Flask 中的函式“render_template”,並使用一些輸入返回 render_template。因此,以下函式將完成我們的工作:
from flask import render_template return render_template(‘home.html’)
讓我們建立一個資料夾 template 並將 home.html 檔案放在其中。
接下來,我們將討論佈局。與其為每個模板都使用 html head 標籤和 body 標籤,不如設計一個佈局來包含 head 和 body 標籤,幷包裝當前檢視或當前模板。為此,我們必須建立一個單獨的檔案並將其命名為layout.html。在這裡,我們可以放置普通的 head 標籤、body 標籤以及所有其他必需的標籤。
我們可以使用以下幾行程式碼建立新的 layout.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>MyFlaskApp</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>
<body>
{% include 'includes/_navbar.html' %}
<div class="container">
{% block body %}
{% endblock %}
</div>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js">
</script>
</body>
</html>
在上面的程式碼中,我們給出了標題 track、MyFlaskAp,在 head 中使用了 css cdn,並在 body 塊中使用了 javascript 來啟用 bootstrap。
現在,我們必須為每個頁面建立導航欄。為此,我們必須首先建立一個 include 資料夾,然後在其中建立 _navbar.html 檔案。現在,在 _navbar.html 中,我們必須使用 getbootstrap.com 上的標準啟動模板。新建立的 _navbar.html 檔案如下所示:
並將此 _navbar.html 檔案包含到我們的 layout.html 檔案中。
{% include 'includes/_navbar.html' %}
由於我們有 layout 塊,我們可以在我們的 home 檔案 (home.html) 中擴充套件此塊。
可以使用以下程式碼建立我們的 home.html 檔案:
{% extends 'layout.html' %}
{% block body %}
<div class="jumbotron text-center">
<h1>Welcome to FlaskApp</h1>
<p>This application is built on Flask webframework!</p>
</div>
{% endblock %}
如果使用它嘗試執行我們的 flaskapp.py 檔案,那麼我們可以在瀏覽器中看到以下輸出:
現在我們要啟用(當前選項卡不起作用)我們的about選項卡。為 about 選項卡建立一個路由並建立一個模板檔案about.html。
appflask.py 中的 About 選項卡路由將如下所示:
about.html 檔案將包含以下內容:
因此,Home 和 About 現在已經處理完畢。對於文章,我們可以在根目錄中建立一個新檔案 (data.py),我們在其中放置資料並在我們的網頁中呼叫它。
data.py
def Articles():
articles = [
{
'uid': 1,
'title': 'Article_One',
'body': 'Flask, being a microframework, often requires some repetitive step
to get a third party library working. Because very often these steps could
be abstracted to support multiple projects the Flask Extension Registry
was created.',
'Author': 'Rajesh Joshi',
'Created-on': '07-09-2018'
},
{
'uid': 2,
'title': 'Article_Two',
'body': "Flask, being a microframework, often requires some repetitive steps
to get a third party library working. Because very often these steps could
be abstracted to support multiple projects the Flask Extension Registry
was created.",
'Author': 'Rajesh J',
'Created-on': '07-09-2018'
},
{
'uid': 3,
'title': 'Article_Three',
'body': 'Flask, being a microframework, often requires some repetitive steps
to get a third party library working. Because very often these steps could be
abstracted to support multiple projects the Flask Extension Registry
was created.',
'Author': 'Joshi Rajesh',
'Created-on': '07-09-2018'
}
]
return articles
以下是articles.html的程式碼,它將為每個 uid 顯示文章標題。
{% extends 'layout.html' %}
{% block body %}
<h1>Articles</h1>
{% for article in articles %}
<li class="list-group-item">
<a href="article/{{article.uid}}"> {{article.title}}</a>
</li>
{% endfor %}
{% endblock %}
總而言之,Flask 憑藉其輕量級特性成為最流行的 Python Web 框架之一。雖然它是一個微框架,但它是一個可擴充套件的 Python Web 框架。透過提供所需的功能,Flask 加速了簡單 Web 應用程式的開發。因此,Flask 更適合小型、不太複雜的應用程式。
Web2py 框架
Web2py 是一個易於使用的框架。使用 Web2py,無需安裝和配置,因為它具有可移植性,也可以在 USD 驅動器上執行。它基於 MVC 框架,就像許多其他 Python 框架一樣。雖然大多數框架不支援舊版本的 Python,但 Web2py 仍然支援舊版本:Python 2.6 和 2.7。它還支援當今廣泛接受的 LDAP 進行身份驗證。
Web2py 試圖透過關注三個主要目標來降低進入 Web 開發的門檻:
- 快速開發
- 易於使用
- 安全性
牢記使用者視角,Web2py 在內部構建並不斷最佳化,使其成為更快、更精簡的框架,包括對向後相容性的支援。
安裝和配置 Web2py 框架
執行 web2py 很容易,您需要從以下連結下載 exe 檔案:http://www.web2py.com/init/default/download
對於 Windows,您可以下載 zip 檔案,解壓縮它並直接或從命令列執行 exe 檔案。系統將提示您輸入管理員密碼。
您可以選擇管理員密碼並啟動伺服器。您將看到以下螢幕:
使用 Web2py 建立應用程式
現在我們準備建立一個新的應用程式。單擊位於底部的 admin 選項卡。因此,輸入管理員密碼後,我們將看到以下螢幕:
轉到新的簡單應用程式,輸入一些應用程式名稱(例如 helloWeb2py)並單擊建立。這將顯示如下所示的設計介面頁面:
您也可以訪問您當前的即時 Web,helloWeb2py,只需在您的本地計算機上鍵入http://127.0.0.1:8000/helloWeb2py,您將獲得以下輸出:
在 helloWeb2py 應用程式的設計頁面中,轉到控制器並單擊 default.py 旁邊的編輯按鈕。如果您更改 index() 函式的返回值,將顯示以下輸出:
儲存更改,現在您可以檢查在 helloWeb2py 應用程式中所做的更改。只需重新整理http://127.0.0.1:8000/helloWeb2py連結,您將看到以下輸出:
在雲平臺上部署應用程式
現在,如果您想在雲平臺上部署您的應用程式,請返回您的主頁並單擊站點。您可以選擇任何部署選項。在這裡,我們選擇“pythonAnywhere”。轉到 pythonAnywhere 網站並註冊(如果尚未註冊)。單擊“新增新的 Web 應用程式”並填寫所有憑據(選擇 web2py 應用程式)。全部完成。
現在轉到https://username.pythonanywhere.com/welcome/default/index,單擊 admin 選項卡(輸入密碼)。接下來單擊上傳並安裝打包的應用程式。填寫如下所示的憑據,然後單擊安裝。
一切完成後,將出現如下所示的彈出訊息:
現在要檢視您的應用程式,請開啟以下連結:
https://username.pythonanywhere.com/welcome/default/index,您將看到以下螢幕:
我們的第一個 web2py 應用程式已成功建立和部署。
總而言之,Web2py 是一個免費、快速、安全的 Web 開發框架,它完全是用 Python 編寫的,並鼓勵儘可能多地使用 Python(模型、檢視、控制器)。對於小型 Web 應用程式或原型來說,這是一個非常好的框架,但無法滿足企業級質量要求。這是因為在企業級應用程式中,由於缺乏單元測試、良好且準確的錯誤報告以及分散的模型,解決錯誤的複雜性將呈指數級增長。
Pyramid 框架
Pyramid 是一個通用的開源 Web 應用程式開發框架,用 Python 構建。它允許 Python 開發人員輕鬆建立 Web 應用程式。
Pyramid 由企業知識管理系統 KARL(一個喬治·索羅斯專案)支援。安裝、啟動和配置
如前所述,“從小處著手,做大做強,保持完成”框架,Pyramid 非常類似於 Flask,安裝和執行只需很少的努力。事實上,一旦您開始構建此應用程式,您就會發現一些模式與 Flask 類似。
以下是建立 Pyramid 框架環境的步驟:
首先,建立一個專案目錄。在這裡,我們建立了一個名為pyramidProject的目錄(您可以選擇任何名稱)。
接下來,建立一個虛擬環境,您將在其中安裝所有專案特定的依賴項。在這裡,我們建立了一個名為pyramidEnv的虛擬環境資料夾,其中安裝了 Pyramid。
然後,轉到目錄pyramidEnv並使用pip install pyramid安裝 Pyramid。
一旦按照上述步驟完成所有操作,您的目錄結構將如下所示:
系統中安裝的 Pyramid 版本如下所示:
核心概念
Pyramid 框架基於以下核心概念:
Zope(可擴充套件性、遍歷、宣告式安全性)— Pyramid 在可擴充套件性、遍歷的概念和宣告式安全性方面鬆散地基於 Zope。
Pylons(URL 分派、對永續性的非意見性檢視、模板等)— Pyramid 獲取其概念的另一個領域是 pylons 專案。Pylons 具有路由的概念,它呼叫 Pyramid 框架內的 URL 分派,它們還具有對持久層或模板的非意見性檢視。
Django(檢視、文件級別)— Pyramid 也從 Django 獲取提示。我們獲取檢視、路由 URL 和文件級別的方式非常 Django 式。
以下是 Pyramid 框架的功能:
它是已知最快的 Python Web 框架。
它支援小型和大型專案(當您超越小型框架時,為什麼要重寫)。
它支援像微框架一樣的單個檔案 Web 應用程式。
它具有內建會話。
它支援類似於 Plone/Zope 的事件。
它提供事務管理(如果您已經注意到我們之前使用了 Zope)。
配置
配置是影響應用程式操作的設定。有兩種方法可以配置 Pyramid 應用程式:命令式配置和宣告式配置。
Pyramid 配置支援:
命令式配置甚至覆蓋基於裝飾器的配置
配置衝突檢測(包括更本地與更不本地的確定)
配置可擴充套件性(包含來自多個應用程式)
靈活的身份驗證和授權策略
配置的程式化自省(檢視路由的當前狀態以生成導航)
URL 生成
在 Pyramid 中,我們可以為路由、資源和靜態資源生成 URL。使用 URL 生成 API 很容易且靈活。透過使用 Pyramid 的各種 API 生成 URL,使用者可以任意更改配置,而無需擔心破壞與任何網頁的連結。
因此,簡而言之,Pyramid 中的 URL:
支援 URL 生成,以便可以更改不會破壞連結的應用程式。
生成位於應用程式內部或外部的靜態資源的 URL。
支援路由和遍歷。
檢視
Pyramid 的主要工作之一是在請求到達您的應用程式時查詢並呼叫檢視可呼叫物件。檢視可呼叫物件是可以響應您的應用程式中發出的請求而執行一些有趣操作的程式碼片段。
當您將檢視對映到 URL 分派或 Python 程式碼時,可以進行任何型別的呼叫。檢視可以是函式宣告或例項,它可以用作 Pyramid 中的檢視。
以下是一些關於檢視的重要說明:
檢視由任何可呼叫物件生成。
基於渲染器的檢視可以簡單地返回字典(不需要返回 webby 風格的物件)。
支援每個路由的多個檢視(GET 與 POST 與 HTTP 標頭檢查等)。
檢視響應介面卡(當您想指定如何處理檢視返回值與響應物件時)。
可擴充套件性
Pyramid 的設計理念是可擴充套件性。因此,如果 Pyramid 開發人員在構建應用程式時牢記某些約束條件,則第三方應該能夠更改應用程式的行為,而無需修改其原始碼。遵守某些約束條件的 Pyramid 應用程式的行為可以在無需任何修改的情況下被覆蓋或擴充套件。它專為靈活部署到多個環境而設計(無單例)。Pyramid 支援“Tweens”中介軟體(WSGI 中介軟體,但在 Pyramid 本身環境中執行)。
執行“Hello, Pyramid”程式
安裝 Pyramid 框架後,我們可以想到的最簡單的程式來檢查一切是否正常執行,就是執行一個簡單的“Hello, World”或“Hello, Pyramid”程式。
以下是我的 Pyramid “Hello, Pyramid”程式,埠號為 8000:
以上簡單的示例易於執行。將其儲存為 app.py(在此,我們將其命名為 pyramid_helloW.py)。
執行最簡單的程式:
接下來,在瀏覽器中開啟 **https://:8000/**,您將看到如下所示的“Hello, Pyramid!”訊息:
以下是上述程式碼的解釋:
第 1-3 行
在檔案開頭,我們有 import 語句。第一行匯入 make_server 函式,當將其傳遞給應用程式時,它可以建立一個簡單的 Web 伺服器。第二行和第三行分別從 pyramid 匯入 configuration 和 Response 函式。這些函式分別用於配置應用程式的詳細資訊和設定引數以及響應請求。
第 5-6 行
現在我們有一個名為 **hello_world** 的函式定義。實現生成響應的檢視程式碼。滿足檢視要求的函式負責呈現將傳遞迴請求實體的文字。在上述情況下,該函式在被呼叫時使用我們之前匯入的 Response 函式。這將傳遞迴應賦予客戶端的值。
第 8 行
if __name__ == ‘__main__’: Python 的意思是“從命令列執行時從這裡開始”,而不是當匯入此模組時。
第 9-11 行
在第 9 行,我們從我們在程式頂部匯入的 configurator 函式建立的物件建立一個名為 config 的變數。第 10 行和第 11 行呼叫此物件的 add_route 和 add_view 方法。此方法用於定義應用程式可以使用的一個檢視。我們可以看到,我們傳遞了前面定義的 hello_world 函式。這就是該函式實際上被作為檢視整合的地方。
第 12-14 行
在此,我們實際上透過呼叫 config 物件的 make_wsgi_app 方法來建立 WSGI 應用程式。這使用該物件屬性(例如我們新增的檢視)來建立一個應用程式。然後將此應用程式傳遞給我們匯入的 make_server 函式,以便建立一個可以啟動 Web 伺服器來服務我們的應用程式的物件。最後一行啟動此伺服器。
我們的 **hello world 應用程式** 是最簡單、最容易實現的 Pyramid 應用程式之一,採用“命令式”配置。它是命令式的,因為在我們執行配置任務時,我們可以使用 Python 的全部功能。
總而言之,Pyramid 是一個擁有龐大而活躍社群的開源 Python Web 框架。這個龐大的社群有助於使 Python Web 框架流行和相關。Pyramid Web 框架透過提供一系列強大的功能和工具來簡化和加速 Web 應用程式的開發。
Dash 框架
在本章中,我們將詳細討論 Dash 框架。
Dash 是一個用於構建分析型 Web 應用程式的開源 Python 框架。它是一個強大的庫,簡化了資料驅動應用程式的開發。它對不太熟悉 Web 開發的 Python 資料科學家特別有用。使用者可以使用 Dash 在瀏覽器中建立令人驚歎的儀表板。
Dash 基於 Plotly.js、React 和 Flask 構建,它將現代 UI 元素(如下拉選單、滑塊和圖表)直接繫結到您的分析 Python 程式碼。
Dash 應用程式由一個 Flask 伺服器組成,該伺服器使用 HTTP 請求透過 JSON 資料包與前端 React 元件進行通訊。
Dash 應用程式完全用 Python 編寫,因此無需 HTML 或 JavaScript。
Dash 設定
如果您的終端中尚未安裝 Dash,請安裝以下提到的 Dash 庫。由於這些庫處於積極開發中,請頻繁安裝和升級它們。Python 2 和 3 也受支援。
- pip install dash==0.23.1 # Dash 核心後端
- pip install dash-renderer==0.13.0 # Dash 前端
- pip install dash-html-components==0.11.0 # HTML 元件
- pip install dash-core-components==0.26.0 # 高階元件
- pip install plotly==3.1.0 # Plotly 繪相簿
為了確保一切正常執行,我們在這裡建立了一個簡單的 dashApp.py 檔案。
Dash 或應用程式佈局
Dash 應用程式由兩部分組成。第一部分是應用程式的“佈局”,它基本上描述了應用程式的外觀。第二部分描述了應用程式的互動性。
核心元件
我們可以使用 **dash_html_components** 和 **dash_core_components** 庫構建佈局。Dash 為應用程式的所有可視元件提供了 Python 類。我們還可以使用 JavaScript 和 React.js 自定義我們自己的元件。
import dash_core_components as dcc
import dash_html_components as html
dash_html_components 用於所有 HTML 標籤,而 dash_core_components 用於使用 React.js 構建的互動性。
使用以上兩個庫,讓我們編寫如下程式碼:
app = dash.Dash() app.layout = html.Div(children=[ html.H1(children='Hello Dash'), html.Div(children='''Dash Framework: A web application framework for Python.''')
等效的 HTML 程式碼如下所示:
<div> <h1> Hello Dash </h1> <div> Dash Framework: A web application framework for Python. </div> </div>
編寫簡單的 Dash 應用程式
我們將學習如何在使用上面提到的庫的檔案 **dashApp.py** 中編寫一個關於 Dash 的簡單示例。
# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.Div(children='''Dash Framework: A web application framework for Python.'''),
dcc.Graph(
id='example-graph',
figure={
'data': [
{'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'Delhi'},
{'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Mumbai'},
],
'layout': {
'title': 'Dash Data Visualization'
}
}
)
])
if __name__ == '__main__':
app.run_server(debug=True)
執行 Dash 應用程式
執行 Dash 應用程式時,請注意以下幾點。
(MyDjangoEnv) C:\Users\rajesh\Desktop\MyDjango\dash>python dashApp1.py
正在服務 Flask 應用程式“dashApp1”(延遲載入)
環境:生產
警告:不要在生產環境中使用開發伺服器。
請改用生產 WSGI 伺服器。
除錯模式:開啟
使用 stat 重新啟動
偵錯程式正在活動!
偵錯程式 PIN 碼:130-303-947
運行於 **http://127.0.0.1:8050/**(按 CTRL+C 退出)
127.0.0.1 - - [12/Aug/2018 09:32:39] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [12/Aug/2018 09:32:42] "GET /_dash-layout HTTP/1.1" 200 - 127.0.0.1 - - [12/Aug/2018 09:32:42] "GET /_dash-dependencies HTTP/1.1" 200 - 127.0.0.1 - - [12/Aug/2018 09:32:42] "GET /favicon.ico HTTP/1.1" 200 - 127.0.0.1 - - [12/Aug/2018 09:39:52] "GET /favicon.ico HTTP/1.1" 200 -
在您的 Web 瀏覽器中訪問 **http:127.0.0.1:8050/**。您應該會看到一個如下所示的應用程式。
在上述程式中,需要注意以下幾點:
應用程式佈局由“元件”樹組成,例如 html.Div 和 dcc.Graph。
dash_html_components 庫為每個 HTML 標籤提供了一個元件。html.H1 (children = ‘Hello Dash’) 元件在您的應用程式中生成一個 <h1> Hello Dash </h1> HTML 元素。
並非所有元件都是純 HTML。dash_core_components 描述了更高級別的元件,這些元件是互動式的,並透過 React.js 庫使用 JavaScript、HTML 和 CSS 生成。
每個元件完全透過關鍵字屬性來描述。Dash 是宣告式的:您主要透過這些屬性來描述您的應用程式。
children 屬性是特殊的。按照約定,它始終是第一個屬性,這意味著您可以省略它。
Html.H1 (children=’Hello Dash’) 與 html.H1 (‘Hello Dash’) 相同。
您應用程式中的字型外觀可能與此處顯示的略有不同。此應用程式使用自定義 CSS 樣式表來修改元素的預設樣式。允許自定義字型樣式,但目前,我們可以新增以下 URL 或您選擇的任何 URL:
app.css.append_css ({“external_url”:**https://codepen.io/chriddyp/pen/bwLwgP.css**}) 以獲取您的檔案以獲得與這些示例相同的外觀和感覺。
更多關於 HTML 的資訊
dash_html_components 庫為每個 HTML 標籤都包含一個元件類,以及所有 HTML 引數的關鍵字引數。
讓我們在之前的應用程式文字中新增元件的內聯樣式:
# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
colors = {
'background': '#87D653',
'text': '#ff0033'
}
app.layout = html.Div(style={'backgroundColor': colors['background']}, children=[
html.H1(
children='Hello Dash',
style={
'textAlign': 'center',
'color': colors['text']
}
),
html.Div(children='Dash: A web application framework for Python.', style={
'textAlign': 'center',
'color': colors['text']
}),
dcc.Graph(
id='example-graph-2',
figure={
'data': [
{'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'Delhi'},
{'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Mumbai'},
],
'layout': {
'plot_bgcolor': colors['background'],
'paper_bgcolor': colors['background'],
'font': {
'color': colors['text']
}
}
}
)
])
if __name__ == '__main__':
app.run_server(debug=True)
在上面的示例中,我們使用 style 屬性修改了 html.Div 和 html.H1 元件的內聯樣式。
它在 Dash 應用程式中呈現如下:
dash_html_components 和 HTML 屬性之間存在一些關鍵區別:
對於 Dash 中的 style 屬性,您可以只提供一個字典,而在 HTML 中,它是一個用分號分隔的字串。
樣式字典鍵為 **camelCased**,因此 text-align 更改為 **textalign**。
Dash 中的 ClassName 類似於 HTML class 屬性。
第一個引數是 HTML 標籤的子元素,透過 children 關鍵字引數指定。
可重用元件
透過用 Python 編寫標記,我們可以建立複雜的可重用元件(如表格),而無需切換上下文或語言:
以下是一個從 pandas 資料框生成“表格”的快速示例。
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
df = pd.read_csv(
'https://gist.githubusercontent.com/chriddyp/'
'c78bf172206ce24f77d6363a2d754b59/raw/'
'c353e8ef842413cae56ae3920b8fd78468aa4cb2/'
'usa-agricultural-exports-2011.csv')
def generate_table(dataframe, max_rows=10):
return html.Table(
# Header
[html.Tr([html.Th(col) for col in dataframe.columns])] +
# Body
[html.Tr([
html.Td(dataframe.iloc[i][col]) for col in dataframe.columns
]) for i in range(min(len(dataframe), max_rows))]
)
app = dash.Dash()
app.layout = html.Div(children=[
html.H4(children='US Agriculture Exports (2011)'),
generate_table(df)
])
if __name__ == '__main__':
app.run_server(debug=True)
我們的輸出將類似於:
更多關於視覺化的資訊
dash_core_components 庫包含一個名為 **Graph** 的元件。
Graph 使用開源 plotly.js JavaScript 繪相簿呈現互動式資料視覺化。Plotly.js 支援大約 35 種圖表型別,並以向量質量 SVG 和高效能 WebGL 渲染圖表。
以下是一個從 Pandas 資料框建立散點圖的示例:
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.graph_objs as go
app = dash.Dash()
df = pd.read_csv(
'https://gist.githubusercontent.com/chriddyp/' +
'5d1ea79569ed194d432e56108a04d188/raw/' +
'a9f9e8076b837d541398e999dcbac2b2826a81f8/'+
'gdp-life-exp-2007.csv')
app.layout = html.Div([
dcc.Graph(
id='life-exp-vs-gdp',
figure={
'data': [
go.Scatter(
x=df[df['continent'] == i]['gdp per capita'],
y=df[df['continent'] == i]['life expectancy'],
text=df[df['continent'] == i]['country'],
mode='markers',
opacity=0.7,
marker={
'size': 15,
'line': {'width': 0.5, 'color': 'white'}
},
name=i
) for i in df.continent.unique()
],
'layout': go.Layout(
xaxis={'type': 'log', 'title': 'GDP Per Capita'},
yaxis={'title': 'Life Expectancy'},
margin={'l': 40, 'b': 40, 't': 10, 'r': 10},
legend={'x': 0, 'y': 1},
hovermode='closest'
)
}
)
])
if __name__ == '__main__':
app.run_server()
上述程式碼的輸出如下:
這些圖表是互動式和響應式的。您可以將滑鼠懸停在點上檢視其值,單擊圖例項以切換軌跡,單擊並拖動以縮放,按住 Shift 鍵,然後單擊並拖動以平移。
Markdown
雖然 Dash 透過 dash_html_components 庫公開了 HTML 風格,但用 HTML 編寫文字可能很繁瑣。對於編寫文字塊,您可以使用 dash_core_components 庫中的 Markdown 元件。
核心元件
dash_core_components 包含一組更高階的元件,例如下拉選單、圖表、Markdown、區塊等等。
與所有其他 Dash 元件一樣,它們完全透過宣告式方式描述。每個可配置的選項都作為元件的關鍵字引數提供。
下面是一個示例,使用了其中一些可用的元件:
# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
app.layout = html.Div([
html.Label('Dropdown'),
dcc.Dropdown(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
value='MTL'
),
html.Label('Multi-Select Dropdown'),
dcc.Dropdown(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
value=['MTL', 'SF'],
multi=True
),
html.Label('Radio Items'),
dcc.RadioItems(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
value='MTL'
),
html.Label('Checkboxes'),
dcc.Checklist(
options=[
{'label': 'New York City', 'value': 'NYC'},
{'label': u'Montréal', 'value': 'MTL'},
{'label': 'San Francisco', 'value': 'SF'}
],
values=['MTL', 'SF']
),
html.Label('Text Input'),
dcc.Input(value='MTL', type='text'),
html.Label('Slider'),
dcc.Slider(
min=0,
max=9,
marks={i: 'Label {}'.format(i) if i == 1 else str(i) for i in range(1, 6)},
value=5,
),
], style={'columnCount': 2})
if __name__ == '__main__':
app.run_server(debug=True)
以上程式的輸出如下:
呼叫幫助
Dash 元件是宣告式的。這些元件的每個可配置方面都在安裝過程中作為關鍵字引數設定。您可以在 Python 控制檯中呼叫任何元件的幫助資訊,以瞭解有關元件及其可用引數的更多資訊。其中一些引數如下所示:
>>> help(dcc.Dropdown) Help on class Dropdown in module builtins: class Dropdown(dash.development.base_component.Component) | A Dropdown component. | Dropdown is an interactive dropdown element for selecting one or more | items. | The values and labels of the dropdown items are specified in the `options` | property and the selected item(s) are specified with the `value` property. | | Use a dropdown when you have many options (more than 5) or when you are | constrained for space. Otherwise, you can use RadioItems or a Checklist, | which have the benefit of showing the users all of the items at once. | | Keyword arguments: | - id (string; optional) | - options (list; optional): An array of options | - value (string | list; optional): The value of the input. If `multi` is false (the default) -- More --
總而言之,Dash 應用的佈局描述了應用的外觀。佈局是元件的分層樹。dash_html_components 庫提供了所有 HTML 標籤和關鍵字引數的類,並描述了 HTML 屬性,如 style、className 和 id。dash_core_components 庫生成更高級別的元件,如控制元件和圖表。
選擇更好的框架
Python Web 框架的世界提供了許多選擇。一些值得考慮的著名框架包括 Django、Flask、Bottle、Diesel、Web2py、Pyramid、Falcon、Pecan 等,它們都在爭奪開發人員的關注。像 Pyramid、Django、Web2py 和 Flask 這樣的框架各有優缺點;為您的專案選擇一個合適的框架是一個艱難的抉擇。
Dash 完全針對不同的需求而設計。因此,作為一名開發者,您希望將大量的選項減少到一個能夠幫助您按時完美完成專案的選項。
如果我們比較 Flask、Pyramid 和 Django 框架,Flask 是一款微框架,主要針對具有更簡單需求的小型應用程式,而 Pyramid 和 Django 都針對大型應用程式。Pyramid 的設計理念是靈活性和自由度,因此開發者擁有適合專案的正確工具。對於 Pyramid,開發者可以自由選擇資料庫、URL 結構、模板樣式等等。然而,Django 包含 Web 應用程式所需的所有元件,因此我們只需要安裝 Django 並開始工作。
Django 帶有 ORM,而 Pyramid 和 Flask 則讓開發者自己選擇如何(或是否)儲存資料。通常,對於非 Django Web 應用程式來說,最常見的 ORM 是 SQLAlchemy,但是,其他選項也可以是 DjangoDB、MongoDB、LevelDB 和 SQLite。
作為一名開發者,如果我必須在我的專案中選擇 Django 和 Web2py 之一,我需要對這兩個框架的優缺點有一些瞭解。所以讓我們來比較一下 Django 和 Web2py:
Django
Django 的社群是一個很大的優勢。對開發者來說,這意味著資源將更加豐富。具體來說,這歸結為:
- 文件
- 開源資源
- 第三方應用支援
- 部署支援
- 有幫助的開發人員的 IRC 頻道
Django 擁有非常龐大的開發團隊和文件。當我們處理編寫複雜的後臺時,它是正確的框架,因為它提供了許多第三方應用程式,可以幫助您自動化使用者邏輯(註冊、身份驗證)、非同步任務、API 建立、部落格等。
Web2py
Web2py 非常適合快速開發簡單的 Web 應用或 HTTP 伺服器。以下是 Web2py 的一些優點和缺點。
Web2py 的優點
以下是 Web2py 框架的一些優點:
與 Django 和 Flask 相比,Web2py 在開發速度和簡單性方面是一個很有潛力的框架。由於 Web2py 使用基於 Python 的模板語言,這允許 Python 開發人員在瞭解模板編寫基礎知識後立即開始編寫程式碼。
Web2py 可以執行編譯後的 Python 程式碼作為最佳化,以降低執行時間並允許您以編譯的方式分發程式碼。
Web2py 的缺點
以下是該框架的一些缺點
Web2py 支援 doctest,但不支援單元測試。現在 doctest 由於其範圍有限,並不是最佳選擇。
生產模式和開發模式之間沒有區別。如果發生異常,每次都會生成工單,您必須導航到工單才能檢查錯誤。這在生產伺服器的情況下可能很有用,但在開發環境中會很困難,因為開發人員真正需要立即看到錯誤,而不是檢查工單號。
Web2py 具有良好的資料庫抽象層 (DAL),允許您抽象許多型別的資料庫引擎,但它缺乏強大的 ORM。如果您處理的是相對較大的模型,您的程式碼將分散在所有巢狀定義和屬性中,這會使事情變得複雜。
由於 Web2py 的 IDE 支援非常差,因此無法在不修改的情況下使用標準的 Python 開發工具。
Django 和 Web2py 框架是全棧框架。這意味著它們提供了所有必要的程式碼——從表單生成器到模板佈局和表單驗證,並讓您根據您的特定需求編寫內容。
但是,對於 Flask 和 Pyramid 等非全棧框架,如果您想建立一個功能齊全的網站,則需要自己新增大量程式碼和額外內容。這需要大量的技能和時間。
Dash
Dash 完全是為了構建用於儀表板的響應式框架而設計的。Plotly 的 Dash 是一種很棒的方法,可以讓 Python 開發人員建立互動式 Web 應用,而無需學習 Javascript 和前端 Web 開發。Dash 基於 Flask、Plotly.js、React 和 React Js 之上。
Dash 與其他框架(如上所述)之間沒有可比性,因為它們屬於不同的框架類別。以下是優選 Dash 而不是其他互動式儀表板框架(Jupiter Dashboards、matplotlib 等)的一些原因:
只需 50 行程式碼,就可以編寫一個簡單的“hello world”Dash 應用,因為 Dash 需要很少的樣板程式碼。
整個 Dash 應用都是用 Python 語言編寫的,Python 是全球最受歡迎的語言。
您可以在您自己的 Python 程式碼中,將 Dash 互動式元件(如下拉選單、文字輸入、滑塊和圖表)與響應式 Dash“回撥”繫結。
Dash 應用中複雜的 UI 可以有多個輸入、多個輸出以及依賴於其他輸入的輸入。
同時,多個使用者可以同時使用 Dash 應用。
為了使用 React 建立您自己的 Dash 元件,Dash 使用 React.js 渲染元件幷包含一個外掛系統。
開發人員或編寫者可以編寫響應點選、懸停或選擇圖表上點的 Dash 應用,因為 Dash 的圖表元件是互動式的。
結論
我們可以得出結論,從許多可用的 Python 框架中選擇正確的框架,完全取決於專案型別、複雜性、小型或企業級專案、可用的社群支援或可用的線上資源、可擴充套件性、安全性等。
上述 Python 框架在其類別中都是最好的,但它們都有自己的優點和缺點(取決於專案需求)。因此,一種型別的框架並不適用於所有型別的專案。