python入門python的基本語法
916
2025-03-31
目錄
演示:您將構建的內容
項目概況
先決條件
第 1 步:搭建一個用于托管的 Django 項目
創(chuàng)建虛擬環(huán)境
安裝項目依賴
引導一個 Django 項目
更新本地數據庫架構(可選)
運行本地開發(fā)服務器
步驟 2:創(chuàng)建本地 Git 存儲庫
初始化一個空的 Git 存儲庫
指定未跟蹤的文件
進行第一次提交
第 3 步:創(chuàng)建一個免費的 Heroku 帳戶
報名
啟用多重身份驗證(可選)
添加付款方式(可選)
第 4 步:安裝 Heroku CLI
第 5 步:使用 Heroku CLI 登錄
第 6 步:創(chuàng)建 Heroku 應用程序
第 7 步:將您的 Django 項目部署到 Heroku
選擇構建包
選擇 Python 版本(可選)
指定要運行的進程
配置 Django
配置 Heroku 應用程序
發(fā)布應用
步驟 8:設置關系數據庫
配置 PostgreSQL 服務器
更新遠程數據庫架構
填充數據庫
結論
下一步
作為Web 開發(fā)新手,您已經構建了自己的投資組合應用程序并在GitHub 上共享了您的代碼。也許,您希望吸引技術招聘人員找到您的第一份編程工作。許多編碼訓練營的畢業(yè)生可能都在做同樣的事情。為了讓自己從人群中脫穎而出并增加獲得關注的機會,您可以開始在線托管您的 Django 項目。
對于業(yè)余愛好 Django 項目,您需要免費、快速設置、用戶友好且與現有技術堆棧良好集成的托管服務。雖然GitHub Pages非常適合托管靜態(tài)網站和使用JavaScript 的網站,但您需要一個網絡服務器來運行您的Flask或Django項目。
有幾個主要的云平臺提供商以不同的模型運行,但您將在本教程中探索Heroku。它符合所有條件——免費、快速設置、用戶友好且與 Django 良好集成——并且是許多初創(chuàng)公司最喜歡的云平臺提供商。
在本教程中,您將學習如何:
在幾分鐘內讓您的Django項目上線
使用Git將您的項目部署到 Heroku
使用Django-Heroku集成庫
將你的 Django 項目連接到一個獨立的關系數據庫
管理配置以及敏感數據
要繼續(xù),您可以通過單擊下面的鏈接下載代碼和其他資源:
演示:您將構建的內容
您將創(chuàng)建一個基本的 Django 項目,并直接從終端將其部署到云中。最后,您將擁有一個指向您的第一個 Heroku 應用程序的公開且可共享的鏈接。
這是一個一分鐘的視頻,演示了必要的步驟,從初始化一個空的 Git 存儲庫到在瀏覽器中查看您完成的項目。堅持觀看直到最后,快速預覽您將在本教程中找到的內容:
項目概況
本教程不是關于構建任何特定項目,而是使用Heroku在云中托管一個項目。雖然 Heroku 支持各種語言和 Web 框架,但您將堅持使用 Python 和 Django。如果您手頭沒有任何 Django 項目,請不要擔心。第一步將引導您搭建一個新的 Django 項目,以幫助您快速入門。或者,您可以使用稍后會找到的現成示例項目。
準備好 Django 項目后,您將注冊一個免費的 Heroku 帳戶。接下來,您將下載一個方便的命令行工具,幫助您在線管理您的應用程序。如上面的截屏視頻所示,命令行是使用 Heroku 的一種快捷方式。最后,您將在新配置的 Heroku 實例上托管已部署的 Django 項目。您可以將最終結果視為未來項目創(chuàng)意的占位符。
先決條件
在繼續(xù)之前,請確保您熟悉Django Web 框架的基礎知識,并且您可以輕松地使用它來設置基本項目。
注意:如果您對 Flask 的經驗比 Django 更有經驗,那么您可以查看關于使用 Heroku 部署 Python Flask 示例應用程序的類似教程。
您還應該安裝并配置一個Git客戶端,以便您可以從命令行方便地與 Heroku 平臺交互。最后,您應該認真考慮為您的項目使用虛擬環(huán)境。如果您還沒有想到特定的虛擬環(huán)境工具,您很快就會在本教程中找到一些選項。
第 1 步:搭建一個用于托管的 Django 項目
要在云中托管 Django Web 應用程序,您需要一個有效的Django 項目。就本教程而言,不必詳細說明。如果時間不夠,請隨意使用您的業(yè)余愛好項目之一或構建示例投資組合應用程序,然后跳到創(chuàng)建本地 Git 存儲庫。否則,堅持從頭開始制作一個全新的項目。
創(chuàng)建虛擬環(huán)境
通過創(chuàng)建一個不會與其他項目共享的隔離虛擬環(huán)境來開始每個項目是一個好習慣。這可以使您的依賴項井井有條,并有助于避免包版本沖突。一些依賴管理器和打包工具(如Pipenv或詩歌)會自動創(chuàng)建和管理虛擬環(huán)境,以便您遵循最佳實踐。當您開始一個新項目時,許多IDE(如PyCharm)默認也會這樣做。
但是,創(chuàng)建 Python 虛擬環(huán)境最可靠和可移植的方法是從命令行手動創(chuàng)建。可以使用virtualenvwrapper等外部工具,也可以直接調用內置venv模塊。雖然 virtualenvwrapper 將所有環(huán)境保存在預定義的父文件夾中,但venv希望您分別為每個環(huán)境指定一個文件夾。
您將venv在本教程中使用標準模塊。習慣上把虛擬環(huán)境放在項目根文件夾下,所以我們先做一個,把工作目錄改成它:
$ mkdir portfolio-project $ cd portfolio-project/
您現在位于portfolio-project文件夾中,該文件夾將成為您的項目的主目錄。要在此處創(chuàng)建虛擬環(huán)境,只需運行該venv模塊并為您的新環(huán)境提供路徑。默認情況下,文件夾名稱將成為環(huán)境名稱。如果你愿意,你可以使用可選--prompt參數給它一個自定義名稱:
$ python3 -m venv ./venv --prompt portfolio
.以前導點 (?)開頭的路徑表示它相對于當前工作目錄。雖然不是強制性的,但這個點清楚地表明了你的意圖。無論哪種方式,此命令都應venv在您的portfolio-project根目錄中創(chuàng)建一個子目錄:
portfolio-project/ │ └── venv/
這個新的子目錄包含 Python 解釋器的副本以及一些管理腳本。您現在已準備好將項目依賴項安裝到其中。
安裝項目依賴
大多數實際項目都依賴于外部庫。Django 是第三方 Web 框架,并沒有隨附現成的 Python。您必須在項目的虛擬環(huán)境中安裝它以及它自己的依賴項。
如果您還沒有激活虛擬環(huán)境,請不要忘記激活。為此,您需要在虛擬環(huán)境的bin/子文件夾中可用的 shell 腳本之一中執(zhí)行命令。例如,如果您使用Bash,則獲取activate腳本:
$ source venv/bin/activate
在shell提示符現在應該顯示與您的虛擬環(huán)境的名稱前綴來顯示它的激活。您可以仔細檢查特定命令指向的可執(zhí)行文件:
(portfolio) $ which python /home/jdoe/portfolio-project/venv/bin/python
以上輸出確認運行python將執(zhí)行位于您的虛擬環(huán)境中的相應文件?,F在,讓我們?yōu)槟?Django 項目安裝依賴項。
您需要一個相當新版本的 Django。根據您閱讀本文的時間,可能會有更新的版本可用。為避免潛在的兼容性問題,您可能需要指定與編寫本教程時使用的版本相同的版本:
(portfolio) $ python -m pip install django==3.2.5
這將安裝 3.2.5 版本的 Django。包名稱不區(qū)分大小寫,因此例如鍵入django或都沒有關系Django。
注意:有時,您會看到有關新版本pip可用的警告。忽略此警告通常是無害的,但如果您在生產環(huán)境中,出于安全原因,您需要考慮升級:
(portfolio) $ python -m pip install --upgrade pip
或者,您可以在配置文件中禁用版本檢查,如果它困擾您并且您知道可能的后果。
安裝 Django 會帶來一些額外的傳遞依賴項,您可以通過列出它們來顯示:
(portfolio) $ python -m pip list Package Version ---------- ------- asgiref 3.4.1 Django 3.2.5 pip 21.1.3 pytz 2021.1 setuptools 56.0.0 sqlparse 0.4.1
由于您希望其他人能夠毫無問題地下載和運行您的代碼,因此您需要確保可重復構建。這就是冷凍的目的。它以特殊格式輸出大致相同的一組依賴項及其子依賴項:
(portfolio) $ python -m pip freeze asgiref==3.4.1 Django==3.2.5 pytz==2021.1 sqlparse==0.4.1
這些本質上是pip install命令的參數。但是,它們通常封裝在一個或多個可以一次性使用的需求文件中pip。要創(chuàng)建這樣的文件,您可以重定向freeze命令的輸出:
(portfolio) $ python -m pip freeze > requirements.txt
此文件應提交到您的 Git 存儲庫,以便其他人可以通過pip以下方式安裝其內容:
(portfolio) $ python -m pip install -r requirements.txt
目前,您唯一的依賴項是 Django 及其子依賴項。但是,您必須記住在每次添加或刪除任何依賴項時重新生成和提交需求文件。這是前面提到的包管理器可能派上用場的地方。
有了這些,讓我們開始一個新的 Django 項目!
引導一個 Django 項目
每個 Django 項目都由遵循特定命名約定的類似文件和文件夾組成。您可以手動創(chuàng)建這些文件和文件夾,但以自動方式進行通常更快、更方便。
安裝 Django 時,它會為管理任務(例如引導新項目)提供命令行實用程序。該工具位于您的虛擬環(huán)境的bin/子文件夾中:
(portfolio) $ which django-admin /home/jdoe/portfolio-project/venv/bin/django-admin
您可以在 shell 中運行它并傳遞新項目的名稱以及它將創(chuàng)建默認文件和文件夾的目標目錄:
(portfolio) $ django-admin startproject portfolio .
或者,您可以通過調用django模塊來獲得相同的結果:
(portfolio) $ python -m django startproject portfolio .
請注意這兩個命令末尾的點,它表示您當前的工作目錄portfolio-project,作為目標。如果沒有它,該命令將創(chuàng)建另一個與您的項目同名的父文件夾。
如果您收到command not found錯誤或ModuleNotFound?異常,請確保您已激活安裝 Django 的相同虛擬環(huán)境。其他一些常見錯誤是將您的項目命名為與內置對象之一相同或未使用有效的 Python 標識符。
注意:使用管理工具從頭開始一個新的 Django 項目既快速又靈活,但需要大量的體力勞動。如果您計劃托管生產級 Web 應用程序,則需要配置安全性、數據源等。選擇遵循最佳實踐的項目模板可能會為您省去一些麻煩。
之后,你應該有這個目錄布局:
portfolio-project/ │ ├── portfolio/ │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py │ ├── venv/ │ ├── manage.py └── requirements.txt
您創(chuàng)建了一個名為的管理應用程序portfolio,其中包含項目級設置和帶有 URL 模式的主文件,以及其他一些內容。您還創(chuàng)建了manage.py可以方便地包裝django-admin和連接到您的項目的腳本。
您現在擁有一個基本但可運行的 Django 項目。此時,您通常會啟動一個或多個Django 應用程序并定義它們的視圖和模型,但本教程不需要它們。
更新本地數據庫架構(可選)
此步驟是可選的,但如果您想使用Django 管理視圖或定義自定義應用程序和模型,那么您最終需要更新您的數據庫架構。默認情況下,Django 帶來了一個基于文件的SQLite 數據庫,方便測試和運行本地開發(fā)服務器。這樣,您無需安裝和設置像MySQL或PostgreSQL這樣的成熟數據庫。
要更新數據庫架構,請運行migrate子命令:
(portfolio) $ python manage.py migrate
成功應用所有掛起的遷移后,您將db.sqlite3在項目根文件夾中找到一個名為的新文件:
portfolio-project/ │ ├── portfolio/ │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py │ ├── venv/ │ ├── db.sqlite3 ├── manage.py └── requirements.txt
您可以使用sqlite3命令行實用程序、Python 的內置sqlite3模塊或您喜歡的數據庫管理工具檢查其內容。到現在為止,這個文件應該包含一些負責身份驗證、會話管理等的內部應用程序的表,以及一個用于跟蹤應用遷移的元表。
運行本地開發(fā)服務器
在通過將 Heroku 放在項目之上來增加復雜性之前,在本地計算機上測試所有內容是有意義的。這可能會讓您免去很多不必要的調試。幸運的是,Django 帶有一個用于開發(fā)目的的輕量級 Web 服務器,它幾乎不需要配置。
注意:從技術上講,您可以利用 Heroku 上 Django 中內置的相同開發(fā)服務器。然而,它并不是為處理現實生活中的流量而設計的,也不安全。你最好使用像Gunicorn這樣的WSGI服務器。
要運行開發(fā)服務器,請在之前激活虛擬環(huán)境的終端窗口中鍵入以下命令:
(portfolio) $ python manage.py runserver
默認情況下,它將在本地主機端口 8000上啟動服務器。如果另一個應用程序已經在使用 8000,您可以調整端口號。服務器將持續(xù)監(jiān)視項目源文件中的更改,并在必要時自動重新加載它們。當服務器仍在運行時,導航到 Web 瀏覽器中的 URL:
http://127.0.0.1:8000/
主機127.0.0.1代表虛擬本地網絡接口上的IP 地址之一。如果一切順利并且您沒有更改默認項目設置,那么您應該登陸 Django 歡迎頁面:
萬歲!火箭已起飛,您的 Django 項目已準備好在云中部署。
步驟 2:創(chuàng)建本地 Git 存儲庫
既然您已經有了一個可以運行的 Django 項目,那么下一步是將它托管在云中。在本節(jié)中,您將探索在 Heroku 平臺上構建和部署應用程序的可用選項。如果您還沒有為您的項目創(chuàng)建本地 Git 存儲庫,您還將創(chuàng)建該存儲庫。在這一步結束時,您將準備好深入研究 Heroku 工具鏈。
Heroku 至少提供了五種不同的方式來部署您的項目:
Git:推送提交到 Heroku 上的遠程 Git 存儲庫
GitHub:合并拉取請求時自動觸發(fā)部署
Docker:將Docker鏡像推送到 Heroku 容器注冊表
API:以編程方式自動化部署
Web:從 Heroku 儀表板手動部署
最直接且以開發(fā)人員為中心的方法是第一種方法。許多軟件開發(fā)人員每天都在使用 Git,因此 Heroku 的入門門檻非常低。該git命令可讓您在 Heroku 中完成很多工作,這就是您將在本教程中使用 Git 的原因。
初始化一個空的 Git 存儲庫
使用組合鍵Ctrl+C或Cmd+C停止開發(fā)服務器或打開另一個終端窗口,然后在項目根文件夾中初始化本地 Git 存儲庫:
$ git init
無論您的虛擬環(huán)境是否處于活動狀態(tài),這都無關緊要。它應該創(chuàng)建一個新的.git子文件夾,其中將包含 Git 跟蹤的文件的歷史記錄。名稱以點開頭的文件夾在 macOS 和 Linux 上是隱藏的。如果要檢查是否創(chuàng)建成功,則使用ls -a命令查看此文件夾。
指定未跟蹤的文件
告訴 Git 忽略哪些文件以便它不再跟蹤它們是很有用的。某些文件不應該是存儲庫的一部分。您通常應該忽略IDE 和代碼編輯器設置、包含密碼等敏感數據的配置文件、Python 虛擬環(huán)境等二進制文件、緩存文件以及 SQLite 數據庫等數據。
當您檢查新 Git 存儲庫的當前狀態(tài)時,它將列出工作目錄中存在的所有文件,并建議將它們添加到存儲庫中:
$ git status On branch master No commits yet Untracked files: (use "git add
與其添加所有這些文件和文件夾,不如讓 Git 忽略其中的一些,例如:
.idea/
__pycache__/
db.sqlite3
venv/
該.idea/文件夾特定于 PyCharm。如果您使用的是Visual Studio Code或其他編輯器,則需要將其相應的文件和文件夾添加到此列表中。預先包含更多文件名模式將使其他貢獻者安全地使用他們選擇的編輯器和 IDE,而不必過于頻繁地更新列表。
Git 會查找一個名為 的特殊文件.gitignore,該文件通常位于存儲庫的根文件夾中。每行都包含要排除的具體文件名或通用文件名模式。您可以手動編輯此文件,但使用gitignore.io網站從一組預定義的組件中創(chuàng)建一個要快得多:
您會注意到在地址欄中輸入gitignore.io會將瀏覽器重定向到 Toptal 擁有的更詳細的域。
在這里,您可以選擇正在使用的編程語言、庫和工具。如果您對選擇感到滿意,請單擊“創(chuàng)建”按鈕。然后,將結果復制并粘貼到文本編輯器并將其另存為.gitignore項目根文件夾中,或者記下 URL 并在命令行中使用cURL下載文件:
$ curl https://www.toptal.com/developers/gitignore/api/python,pycharm+all,django > .gitignore
如果你發(fā)現自己重復輸入這個 URL,那么你可以考慮在你的 shell 中定義一個別名命令,這應該是最容易記住的:
$ git ignore python,pycharm+all,django > .gitignore
通常有多種方法可以實現相同的目標,了解不同的選項可以教你很多東西。無論哪種方式,創(chuàng)建.gitignore文件后,您的存儲庫狀態(tài)應如下所示:
$ git status On branch master No commits yet Untracked files: (use "git add
創(chuàng)建本地 Git 存儲庫的其余步驟是暫存您的更改并將其保存在您的第一次提交中。
進行第一次提交
請記住,要通過 Git 使用 Heroku,您必須將代碼推送到遠程 Git 存儲庫。為此,您需要在本地存儲庫中至少進行一次提交。首先,將新文件添加到暫存區(qū),它是工作樹和本地存儲庫之間的緩沖區(qū)。然后,重新檢查狀態(tài)以確認您沒有遺漏任何內容:
$ git add . $ git status On branch master No commits yet Changes to be committed: (use "git rm --cached
這些文件已準備好提交,所以讓我們拍攝它們的快照并將它們保存在本地存儲庫中:
$ git commit -m "Initial commit"
提供描述性提交消息以幫助您瀏覽更改歷史總是一個好主意。作為一個經驗法則,你的消息應該解釋為什么你所做的更改。畢竟,任何人都可以查看 Git 日志以準確了解發(fā)生了什么變化。
好的,那么到目前為止你學到了什么?您知道將新版本部署到 Heroku 平臺通常涉及將您的本地提交推送到 Git 遠程。您已經創(chuàng)建了一個本地 Git 存儲庫并進行了第一次提交。接下來,您需要創(chuàng)建您的免費 Heroku 帳戶。
第 3 步:創(chuàng)建一個免費的 Heroku 帳戶
此時,您已準備好注冊一個免費的 Heroku 帳戶并根據自己的喜好進行配置。
Django 將自己標榜為具有截止日期的完美主義者的 Web 框架。Heroku 采用類似的固執(zhí)己見的方法在云中托管 Web 應用程序,旨在縮短開發(fā)時間。它是一種高級且安全的平臺即服務 (PaaS),可減輕您肩上的基礎設施管理負擔,讓您專注于對您最重要的事情——編寫代碼。
有趣的事實:?Heroku 基于亞馬遜網絡服務 (AWS),這是另一個流行的云平臺,主要以基礎設施即服務 (IaaS)模型運行。它比 Heroku 靈活得多,價格也更便宜,但需要一定程度的專業(yè)知識。
許多初創(chuàng)公司和小公司在開發(fā)的早期階段都沒有熟練的 DevOps 工程師團隊。就這些公司的投資回報而言,Heroku 可能是一個方便的解決方案。
報名
要開始使用 Heroku,請訪問Heroku 注冊頁面,填寫注冊表,然后等待帶有鏈接的電子郵件以確認您的帳戶。它將帶您進入密碼設置頁面。配置完成后,您將能夠繼續(xù)使用新的 Heroku 儀表板。您需要做的第一件事是閱讀并接受服務條款。
啟用多重身份驗證(可選)
這一步完全是可選的,但 Heroku 可能會提醒您注冊多重身份驗證 (MFA),以加強對您帳戶的保護并確保其安全。此功能也稱為雙因素身份驗證(2FA),因為它通常只包含兩個階段來驗證您的身份。
有趣的事實:我的個人 Netflix 帳戶曾一度被黑,有人可以使用我的信用卡,即使在我取消訂閱很久之后也是如此。從那時起,我在所有在線服務中啟用了雙因素身份驗證。
登錄到您的 Heroku 儀表板后,單擊右上角的忍者頭像,選擇“帳戶設置”,然后向下滾動,直到您可以看到“多重身份驗證”部分。單擊標有“設置多重身份驗證”的按鈕并選擇您的驗證方法:
Salesforce 身份驗證器
一次性密碼生成器
安全密鑰
內置身份驗證器
恢復代碼
您應該選擇這些驗證方法中的哪一種?
Salesforce是 2010 年收購 Heroku 的母公司,這就是為什么他們將其專有移動應用程序作為您的首選。但是,如果您已經在其他地方使用其他身份驗證器應用程序,請選擇一次性密碼生成器選項并使用您的應用程序掃描二維碼。
該安全密鑰需要外部硬件USB令牌,而內置的身份驗證方法,可以利用設備的指紋識別器,例如,如果它帶有一個。
最后,恢復代碼可以用作附加密碼。即使您只打算在手機上使用身份驗證器應用程序,也應該下載恢復代碼作為備份。如果沒有其他方法來驗證您的身份,如果您丟失、損壞或升級您的手機,您將無法再次登錄您的 Heroku 帳戶。相信我,我去過那里!
Heroku 曾經通過發(fā)送到您手機的 SMS 提供另一種驗證方法,但由于安全問題,他們停止了該方法。
添加付款方式(可選)
如果您不愿意與 Heroku 分享您的信用卡號,那也沒關系。該服務將繼續(xù)免費運行,但有合理的限制。然而,即使您不打算花一分錢在云中托管您的 Django 項目,您仍然可以考慮連接您的付款詳細信息。這是為什么。
在撰寫本教程時,免費帳戶每月只能使用 550 小時。這大約是每天 24 小時使用單個計算機實例的 22 天。當您使用信用卡驗證您的帳戶時,該池會攀升至每月 1,000 小時的免費小時數。
注意:無論您是否驗證您的帳戶,在 30 分鐘窗口內未收到任何 HTTP 流量的免費層級 Web 應用程序都會自動進入休眠狀態(tài)。這可以節(jié)省您的空閑時間,但如果您的應用沒有獲得正常流量,則可能會使用戶體驗變得更糟。當有人想在待機模式下使用您的 Web 應用程序時,需要幾秒鐘才能再次啟動。
驗證您的帳戶的其他好處包括使用免費附加組件(例如關系數據庫)、設置自定義域等的可能性。請記住,如果您決定與 Heroku 共享您的帳單信息,那么啟用多因素身份驗證是一項值得的練習。
到目前為止,您已經通過他們的 Web 界面與 Heroku 進行了交互。雖然這無疑是方便和直觀的,但在線托管 Django 項目的最快方法是使用命令行。
第 4 步:安裝 Heroku CLI
在終端中工作是任何開發(fā)人員的基本技能。鍵入命令起初可能看起來令人生畏,但在看到它的強大功能后,它就變成了第二天性。為了獲得無縫的開發(fā)人員體驗,您需要安裝Heroku 命令行界面 (CLI)。
Heroku CLI 可讓您直接從終端創(chuàng)建和管理您的 Web 應用程序。在這一步中,您將學習一些基本命令以及如何顯示它們的文檔。首先,按照您的操作系統(tǒng)的安裝說明進行操作。完成后,使用以下命令確認安裝成功:
$ heroku --version
如果heroku找到該命令并且您使用的是最新版本的 Heroku CLI,則可以在 shell 中啟用自動完成功能。當您按下Tab鍵時,它會自動完成命令及其參數,從而節(jié)省時間并防止輸入錯誤。
注意:該工具需要一個Node.js服務器,大多數安裝方法都捆綁了它。它也是一個開源項目,這意味著您可以在 GitHub 上查看其源代碼。
Heroku CLI 具有模塊化插件架構,這意味著其功能是自包含的并遵循相同的模式。要獲取所有可用命令的列表,請在終端中輸入heroku help或簡單地heroku輸入:
$ heroku CLI to interact with Heroku VERSION heroku/7.56.0 linux-x64 node-v12.21.0 USAGE $ heroku [COMMAND] COMMANDS access manage user access to apps addons tools and services for developing, extending, (...) apps manage apps on Heroku auth check 2fa status (...)
有時,命令的名稱可能不會泄露它的作用。如果您想了解有關特定命令的更多詳細信息并查看使用的快速示例(如果可用),請使用以下--help標志:
$ heroku auth --help check 2fa status USAGE $ heroku auth:COMMAND COMMANDS auth:2fa check 2fa status auth:login login with your Heroku credentials auth:logout clears local login credentials and invalidates API session auth:token outputs current CLI authentication token. auth:whoami display the current logged in user
在這里,您auth通過使用--help標志來詢問有關命令的更多信息。您可以看到auth后面應該跟一個冒號 (?:) 和另一個命令。通過鍵入heroku auth:2fa,您是在要求 Heroku CLI 檢查您的雙因素身份驗證設置的狀態(tài):
$ heroku auth:2fa --help check 2fa status USAGE $ heroku auth:2fa ALIASES $ heroku 2fa $ heroku twofactor COMMANDS auth:2fa:disable disables 2fa on account
Heroku CLI 命令是分層的。它們通常會有一個或多個子命令,您可以在冒號后指定這些子命令,如上例所示。此外,其中一些子命令可能在命令層次結構的頂層具有可用的別名。例如,鍵入heroku auth:2fa與heroku 2faor具有相同的效果heroku twofactor:
$ heroku auth:2fa Two-factor authentication is enabled $ heroku 2fa Two-factor authentication is enabled $ heroku twofactor Two-factor authentication is enabled
所有三個命令都會給出相同的結果,您可以從中選擇一個更容易記住的命令。
在這個簡短的部分中,您在計算機上安裝了 Heroku CLI 并熟悉了它的語法。您已經看到了一些方便的命令?,F在,要充分利用這個命令行工具,您需要登錄您的 Heroku 帳戶。
第 5 步:使用 Heroku CLI 登錄
即使不創(chuàng)建 Heroku 帳戶,您也可以安裝 Heroku CLI。但是,您必須驗證您的身份并證明您擁有相應的 Heroku 帳戶才能對其進行有意義的操作。在某些情況下,您甚至可能擁有多個帳戶,因此登錄允許您指定在特定時刻使用哪個帳戶。
稍后您將了解到,您不會永久保持登錄狀態(tài)。登錄以確保您有權訪問并確保您使用正確的帳戶是一個好習慣。最直接的登錄方式是通過以下heroku login命令:
$ heroku login heroku: Press any key to open up the browser to login or q to exit:
如果您之前登錄到 Heroku 儀表板,這將打開您的默認 Web 瀏覽器并整齊地獲取您的會話 cookie。否則,如果您啟用了雙因素身份驗證,您將需要提供您的用戶名、密碼和可能的另一個身份證明。成功登錄后,您可以關閉選項卡或瀏覽器窗口并返回終端。
注意:您還可以通過將--interactive標志附加到命令來使用無頭模式登錄,這將提示您輸入用戶名和密碼,而不是啟動 Web 瀏覽器。但是,這不適用于啟用多因素身份驗證。
當您使用 CLI 登錄時,會話 cookie 的暴露是暫時的,因為 Heroku 會生成一個在有限時間內有效的新授權令牌。它存儲在標準令牌.netrc在文件中的主目錄,但你也可以使用Heroku的儀表板或檢查它heroku auth和heroku authorizations插件:
$ heroku auth:whoami jdoe@company.com $ heroku auth:token ? Warning: token will expire today at 11:29 PM ? Use heroku authorizations:create to generate a long-term token f904774c-ffc8-45ae-8683-8bee0c91aa57 $ heroku authorizations Heroku CLI login from 54.239.28.85 059ed27c-d04a-4349-9dba-83a0169277ae global $ heroku authorizations:info 059ed27c-d04a-4349-9dba-83a0169277ae Client:
該過期策略似乎在寫這篇教程的時候有點出問題。官方文檔說它默認應該保持有效一年,而Heroku CLI顯示大約一個月,這也對應于會話cookie過期。使用 Heroku Web 界面手動重新生成令牌將其減少到大約 8 小時。但是,如果您測試實際到期日期是多少,您會發(fā)現它完全不同。如果您在學習本教程時對到期政策感到好奇,請自行探索。
無論如何,該heroku login命令僅用于開發(fā)。在生產環(huán)境中,您通常會生成一個長期存在的用戶授權,該授權永遠不會隨authorizations插件過期。它可以通過Heroku API方便地用于腳本和自動化目的。
第 6 步:創(chuàng)建 Heroku 應用程序
在這一步中,您將創(chuàng)建您的第一個 Heroku 應用程序并了解它如何與 Git 集成。最后,您的項目將擁有一個公開可用的域地址。
在 Django 項目中,應用程序是封裝可重用功能的獨立代碼單元。另一方面,Heroku 應用程序像可擴展的虛擬計算機一樣工作,能夠托管您的整個 Django 項目。每個應用程序都包含源代碼、必須安裝的依賴項列表以及運行項目的命令。
每個項目至少有一個 Heroku 應用程序,但擁有更多應用程序并不少見。例如,您可能希望同時運行項目的開發(fā)、暫存和生產版本。每個都可以連接到不同的數據源并具有不同的功能集。
注意:?Heroku 管道允許您按需創(chuàng)建、推廣和銷毀應用程序,以促進持續(xù)交付工作流。你甚至可以連接 GitHub,這樣每個功能分支都會收到一個臨時應用程序進行測試。
要使用 Heroku CLI 創(chuàng)建您的第一個應用程序,請確保您已經登錄到 Heroku,然后運行heroku apps:create命令或其別名:
$ heroku create Creating app... done, ? polar-island-08305 https://polar-island-08305.herokuapp.com/ | https://git.heroku.com/polar-island-08305.git
默認情況下,它會選擇一個保證唯一的隨機應用名稱,例如polar-island-08305.?您也可以選擇自己的,但它必須在整個 Heroku 平臺上普遍唯一,因為它是您免費獲得的域名的一部分。你會很快發(fā)現它是否已經被占用:
$ heroku create portfolio-project Creating ? portfolio-project... ! ? Name portfolio-project is already taken
如果您考慮一下有多少人使用 Heroku,那么有人已經創(chuàng)建了一個名為 的應用程序也就不足為奇了portfolio-project。當您heroku create在 Git 存儲庫中運行該命令時,Heroku 會自動將一個新的遠程服務器添加到您的.git/config文件中:
$ tail -n3 .git/config [remote "heroku"] url = https://git.heroku.com/polar-island-08305.git fetch = +refs/heads/*:refs/remotes/heroku/*
Git 配置文件的最后三行定義了一個名為 的遠程服務器heroku,它指向您唯一的 Heroku 應用程序。
通常,克隆存儲庫后,您的 Git 配置中將有一個遠程服務器(例如,在 GitHub 或 Bitbucket 上)。但是,本地存儲庫中可以有多個Git 遠程服務器。稍后您將使用該功能向 Heroku 發(fā)布新的應用程序和部署。
注意:有時,使用 Git 可能會變得一團糟。如果您注意到您不小心在本地 Git 存儲庫之外或通過 Web 界面創(chuàng)建了 Heroku 應用程序,那么您仍然可以手動添加相應的 Git 遠程。首先,將目錄更改為項目根文件夾。接下來,列出您的應用以查找所需的名稱:
$ heroku apps === jdoe@company.com Apps fathomless-savannah-61591 polar-island-08305 sleepy-thicket-59477
在確定了應用程序的名稱后——在本例中,polar-island-08305你可以使用git remote add命令或gitHeroku CLI 中的相應插件添加一個名為 的遠程heroku:
$ heroku git:remote --app polar-island-08305 set git remote heroku to https://git.heroku.com/polar-island-08305.git
這將添加一個名為的遠程服務器,heroku除非另有說明。
當你創(chuàng)建一個新的應用程序時,它會告訴你它在.herokuapp.com域中的公共網址。在本教程中,公共網址是https://polar-island-08305.herokuapp.com,但您的網址會有所不同。嘗試將您的 Web 瀏覽器導航到您的唯一域,看看接下來會發(fā)生什么。如果您不記得確切的 URL,只需heroku open在項目根文件夾中時在終端中鍵入命令。它將打開一個新的瀏覽器窗口并獲取正確的資源:
很好!您的 Heroku 應用程序已經在響應 HTTP 請求。但是,它目前是空的,這就是 Heroku 顯示通用占位符視圖而不是您的內容的原因。讓我們將您的 Django 項目部署到這個空白應用程序中。
第 7 步:將您的 Django 項目部署到 Heroku
此時,您已擁有開始在 Heroku 上托管 Django 項目所需的一切。但是,如果您現在嘗試將項目部署到 Heroku,它會失敗,因為 Heroku 不知道如何構建、打包和運行您的項目。它也不知道如何安裝需求文件中列出的特定 Python 依賴項。你現在就解決這個問題。
選擇構建包
Heroku 自動化了許多部署步驟,但它需要了解您的項目設置和技術堆棧。構建和部署項目的方法稱為buildpack。已經有一些官方構建包可用于許多后端技術,包括 Node.js、Ruby、Java、PHP、Python、Go、Scala 和 Clojure。除此之外,您還可以找到用于不太流行的語言(例如 C)的第三方構建包。
您可以在創(chuàng)建新應用程序時手動設置一個,也可以讓 Heroku 根據存儲庫中的文件檢測它。Heroku 識別 Python 項目的一種方法是requirements.txt在項目根目錄中查找文件。確保您已經創(chuàng)建了一個(您pip freeze在設置虛擬環(huán)境時可能已經完成),并且您已將其提交到本地存儲庫。
其他一些有助于 Heroku 識別 Python 項目的文件是Pipfile和setup.py.?Heroku 還將識別Django Web 框架并為其提供特殊支持。因此,如果您的項目包含requirements.txt、Pipfile、 或setup.py,那么除非您正在處理某些極端情況,否則通常不需要設置構建包。
選擇 Python 版本(可選)
默認情況下,Heroku 會選擇一個最新的 Python 版本來運行你的項目。但是,您可以通過runtime.txt在項目根目錄中放置一個文件來指定不同版本的 Python 解釋器,記住提交它:
$ echo python-3.9.6 > runtime.txt $ git add runtime.txt $ git commit -m "Request a specific Python version"
請注意,您的 Python 版本必須包含語義版本控制的所有major.minor.patch組件。雖然只有少數受支持的 Python運行時,但您通常可以調整補丁版本。還有對PyPy的測試版支持。
指定要運行的進程
現在 Heroku 知道如何構建您的 Django 項目,它需要知道如何運行它。一個項目可以由多個組件組成,例如 Web 組件、后臺工作人員、關系數據庫、NoSQL 數據庫、計劃作業(yè)等。每個組件都在單獨的進程中運行。
有四種主要的流程類型:
web: 接收 HTTP 流量
worker: 在后臺執(zhí)行工作
clock: 執(zhí)行預定的作業(yè)
release: 在部署前運行任務
在本教程中,您將只查看 Web 進程,因為每個 Django 項目都至少需要一個。您可以在名為 的文件中定義它,該文件Procfile必須放在您的項目根目錄中:
portfolio-project/ │ ├── .git/ │ ├── portfolio/ │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py │ ├── venv/ │ ├── .gitignore ├── db.sqlite3 ├── manage.py ├── Procfile ├── requirements.txt └── runtime.txt
這Procfile是一種單一的、與語言無關的格式,用于定義組成項目的流程。它將指導 Heroku 如何運行您的 Web 服務器。雖然使用內置開發(fā)服務器不是在生產中運行 Django 項目的推薦做法,但您可以在本練習中使用它:
$ echo "web: python manage.py runserver 0.0.0.0:\$PORT" > Procfile $ git add Procfile $ git commit -m "Specify the command to run your project"
為了使服務器可以從 Heroku 云之外的世界訪問,您指定地址 as0.0.0.0而不是默認的localhost。它將在公共網絡接口上綁定服務器。Heroku 通過PORT環(huán)境變量提供端口號。
您現在可以通過使用 Heroku CLI 在本地運行 Django 項目來測試此配置:
$ heroku local
默認情況下,如果您沒有明確指定進程類型,它將運行該web進程。該heroku local命令是一樣的heroku local web。此外,如果您不使用--port標志設置端口號,則它將使用默認端口5000。
您現在已經指定了希望 Heroku 運行的進程。當您http://localhost:5000/在 Web 瀏覽器中打開 URL時,您應該會再次在 Django 歡迎頁面上看到熟悉的火箭。但是,要通過 公共接口訪問相同的資源http://0.0.0.0:5000/,您需要調整 Django 配置,否則您將收到錯誤請求錯誤。
配置 Django
您之前構建了一個基本的 Django 項目,現在是對其進行配置以使其準備好在您的 Heroku 實例上運行的時候了。配置 Django 項目可讓您微調從數據庫憑據到模板引擎的各種設置。
要通過非本地網絡地址訪問您的 Django 項目,您需要ALLOWED_HOSTS在您的項目設置中指定。除此之外,Python 的 Django buildpack 會為collectstatic您運行命令,這需要STATIC_ROOT定義選項。無論您是否使用 Heroku,在部署 Django 項目時還有一些配置選項需要更改,但在此階段它們不是強制性的。
您可以使用快捷方式安裝一個方便的django-heroku包,而不是手動配置 Django,它可以處理所有這些以及更多。在繼續(xù)之前確保您處于正確的虛擬環(huán)境中,并記住在完成后刷新您的需求文件:
(portfolio) $ python -m pip install django-heroku (portfolio) $ python -m pip freeze > requirements.txt
這將使用項目的最新依賴項替換您的需求文件的內容。接下來,將這兩行 Python 代碼附加到您的portfolio/settings.py文件中,之后不要忘記返回到項目根文件夾:
(portfolio) $ pushd portfolio/ (portfolio) $ echo "import django_heroku" >> settings.py (portfolio) $ echo "django_heroku.settings(locals())" >> settings.py (portfolio) $ popd
或者,如果它們在您的 shell 中不起作用,則使用cd portfolio/andcd ..代替pushdandpopd命令。
因為您echo使用上面的附加重定向運算符 (?>>)附加了命令的輸出,所以您現在在 Django 設置文件的最底部有兩行代碼:
# portfolio/settings.py # ... import django_heroku django_heroku.settings(locals())
這將使用基于項目布局和環(huán)境變量的值更新本地命名空間中的變量。最后,不要忘記將更改提交到本地 Git 存儲庫:
(portfolio) $ git commit -am "Automatic configuration with django-heroku"
現在,您應該能夠使用0.0.0.0主機名訪問您的 Django Web 服務器。沒有它,您將無法通過公共 Heroku 域訪問您的應用程序。
配置 Heroku 應用程序
您為項目選擇了 buildpack 和 Python 版本。您還指定了 Web 進程來接收 HTTP 流量并配置了您的 Django 項目。將 Django 項目部署到 Heroku 之前的最后一個配置步驟需要在遠程 Heroku 應用程序上設置環(huán)境變量。
無論您的云提供商是哪家,配置管理都很重要。特別是,敏感信息,例如數據庫密碼或用于對 Django 會話進行加密簽名的密鑰,不得存儲在代碼中。您還應該記住禁用調試模式,因為它會使您的站點容易受到黑客攻擊。但是,請保持本教程的原樣,因為您將不會顯示任何自定義內容。
傳遞此類數據的常用方法是環(huán)境變量。Heroku 允許您通過heroku config命令管理應用程序的環(huán)境變量。例如,您可能希望從環(huán)境變量中讀取 Django 密鑰,而不是將其硬編碼到settings.py文件中。
既然你安裝了django-heroku,你就可以讓它處理細節(jié)。它檢測SECRET_KEY環(huán)境變量并使用它來設置用于加密簽名的 Django 密鑰。保持該密鑰的安全至關重要。在 中portfolio/settings.py,找到 Django 定義SECRET_KEY變量的自動生成行并將其注釋掉:
# SECURITY WARNING: keep the secret key used in production secret! # SECRET_KEY = 'django-insecure-#+^6_jx%8rmq9oa(frs7ro4pvr6qn7...
除了注釋掉SECRET_KEY變量之外,您還可以完全刪除它。但是現在先握住你的馬,因為你可能馬上就需要它了。
當您heroku local現在嘗試運行時,它會抱怨不再定義 Django 密鑰,并且服務器不會啟動。要解決此問題,您可以在當前終端會話中設置變量,但創(chuàng)建一個.env以所有變量命名的特殊文件用于本地測試會更方便。Heroku CLI 將識別此文件并加載其中定義的環(huán)境變量。
注意:?Git 不應跟蹤.env您剛剛創(chuàng)建的文件。.gitignore只要您遵循前面的步驟并使用 gitignore.io 網站,它就應該已經列在您的文件中。
生成隨機密鑰的一種快速方法是使用 OpenSSL 命令行工具:
$ echo "SECRET_KEY=$(openssl rand -base64 32)" > .env
如果您的計算機上沒有安裝 OpenSSL 并且您使用的是 Linux 機器或 macOS,那么您還可以使用Unix 偽隨機數生成器生成密鑰:
$ echo "SECRET_KEY=$(head -c 32 /dev/urandom | base64)" > .env
這兩種方法中的任何一種都將確保真正隨機的密鑰。您可能會想使用安全性低得多的工具,例如將其設為md5sum當前日期,但這并不真正安全,因為攻擊者可以枚舉可能的輸出。
如果上述命令都不適用于您的操作系統(tǒng),則暫時取消注釋SECRET_KEY變量portfolio/settings.py并在活動虛擬環(huán)境中啟動 Django shell:
(portfolio) $ python manage.py shell
在那里,您將能夠使用 Django 的內置管理實用程序生成一個新的隨機密鑰:
>>>
>>> from django.core.management.utils import get_random_secret_key >>> print(get_random_secret_key()) 6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt%
獲取該密鑰并使用它來設置文件中的SECRET_KEY變量.env:
$ echo 'SECRET_KEY=6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt%' > .env
該heroku local命令會自動獲取.env文件中定義的環(huán)境變量,因此它現在應該可以按預期工作。SECRET_KEY如果您取消注釋變量,請記住再次注釋掉它!
最后一步是為遠程 Heroku 應用程序指定一個 Django 密鑰:
$ heroku config:set SECRET_KEY='6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt%' Setting SECRET_KEY and restarting ? polar-island-08305... done, v3 SECRET_KEY: 6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt%
這將在遠程 Heroku 基礎設施上永久設置一個新的環(huán)境變量,它將立即可供您的 Heroku 應用程序使用。您可以在 Heroku 儀表板或 Heroku CLI 中顯示這些環(huán)境變量:
$ heroku config === polar-island-08305 Config Vars SECRET_KEY: 6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt% $ heroku config:get SECRET_KEY 6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt%
稍后,您可以用另一個值覆蓋它或完全刪除它。輪換機密通常是減輕安全威脅的好主意。一旦秘密泄漏,您應該迅速更改它以防止未經授權的訪問并限制損害。
發(fā)布應用
您可能已經注意到,使用heroku config:set命令配置環(huán)境變量會"v3"在輸出中生成一個特殊的字符串,它類似于版本號。這不是巧合。每次您通過部署新代碼或更改配置來修改您的應用程序時,您都是在創(chuàng)建一個新版本,它會增加您之前看到的 v-number。
要列出您的應用程序發(fā)布的時間順序歷史,請再次使用 Heroku CLI:
$ heroku releases === polar-island-08305 Releases - Current: v3 v3 Set SECRET_KEY config vars jdoe@company.com 2021/07/02 14:24:29 +0200 (~ 1h ago) v2 Enable Logplex jdoe@company.com 2021/07/02 14:19:56 +0200 (~ 1h ago) v1 Initial release jdoe@company.com 2021/07/02 14:19:48 +0200 (~ 1h ago)
列表中的項目按從最新到最舊的順序排列。版本號始終遞增。即使您將應用程序回滾到以前的版本,它也會創(chuàng)建一個新版本以保留完整的歷史記錄。
使用 Heroku 發(fā)布新應用程序歸結為將代碼提交到本地 Git 存儲庫,然后將您的分支推送到遠程 Heroku 服務器。但是,在此之前,請務必仔細檢查是否有git status任何未提交的更改,并根據需要將它們添加到本地存儲庫,例如:
$ git status On branch master Changes not staged for commit: (use "git add
雖然您可以推送任何本地分支,但必須將其推送到特定的遠程分支才能使部署工作。Heroku 僅從遠程main或master分支部署。如果您遵循并使用該git init命令創(chuàng)建了存儲庫,那么您的默認分支應命名為master.?或者,如果您在 GitHub 上創(chuàng)建它,那么它將命名為main.
由于遠程 Heroku 服務器上存在main和master分支,因此您可以使用速記語法來觸發(fā)構建和部署:
$ git push heroku master
在這里,master指的是您的本地和遠程分支。如果您想推送不同的本地分支,請指定其名稱,例如bugfix/stack-overflow,后跟冒號 (?:) 和遠程目標分支:
$ git push heroku bugfix/stack-overflow:master
現在讓我們將默認分支推送到 Heroku,看看接下來會發(fā)生什么:
$ git push heroku master (...) remote: Compressing source files... done. remote: Building source: remote: remote: -----> Building on the Heroku-20 stack remote: -----> Determining which buildpack to use for this app remote: -----> Python app detected remote: -----> Using Python version specified in runtime.txt remote: -----> Installing python-3.9.6 remote: -----> Installing pip 20.2.4, setuptools 47.1.1 and wheel 0.36.2 remote: -----> Installing SQLite3 remote: -----> Installing requirements with pip (...) remote: -----> Compressing... remote: Done: 60.6M remote: -----> Launching... remote: Released v6 remote: https://polar-island-08305.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done. To https://git.heroku.com/polar-island-08305.git * [new branch] master -> master
將代碼推送到 Heroku 就像推送到 GitHub、Bitbucket 或其他遠程 Git 服務器一樣。然而,除此之外,它還開始構建過程。Heroku 將根據您的項目文件確定正確的 buildpack。它將使用runtime.txt文件中指定的 Python 解釋器并從requirements.txt.
在實踐中,將您的代碼一次推送到您選擇的 Git 服務器(例如 GitHub)并讓它通過webhook觸發(fā) Heroku 上的構建會更方便。如果您想進一步探索,可以在 Heroku 的官方文檔中閱讀有關GitHub 集成的信息。
注意:第一次將代碼推送到 Heroku 時,可能需要一段時間,因為平臺需要啟動新的 Python 環(huán)境、安裝依賴項并為其容器構建映像。但是,后續(xù)部署會更快,因為已安裝的依賴項已被緩存。
您可以將瀏覽器導航到 Heroku 應用程序的公共 URL?;蛘?,heroku open在終端中輸入命令將為您完成:
恭喜!您剛剛公開了您的項目。
步驟 8:設置關系數據庫
做得好!您幾乎已經在 Heroku 上為您的 Django 項目設置了托管。等式的最后一個部分,所以堅持一兩分鐘。
到目前為止,您一直在使用由 Django 預先配置的基于文件的 SQLite 數據庫。它適合在您的本地計算機上進行測試,但不適用于云中。Heroku 有一個臨時文件系統(tǒng),它會忘記自上次部署或服務器重啟以來的所有更改。您需要一個獨立的數據庫引擎來將數據保存在云中。
在本教程中,您將使用 Heroku 提供的免費 PostgreSQL 實例作為完全托管的數據庫即服務。如果需要,您可以使用不同的數據庫引擎,但 PostgreSQL 通常不需要額外配置。
配置 PostgreSQL 服務器
當 Heroku 在您的項目中檢測到 Django 框架時,它會自動啟動一個免費但受限的PostgreSQL實例。它DATABASE_URL使用應用程序數據庫的公共 URL設置環(huán)境變量。首次部署應用程序時會進行配置,這可以通過檢查啟用的附加組件和配置變量來確認:
$ heroku addons Add-on Plan Price State ──────────────────────────────────────────────── ───────── ───── ─────── heroku-postgresql (postgresql-trapezoidal-06380) hobby-dev free created └─ as DATABASE The table above shows add-ons and the attachments to the current app (...) $ heroku config === polar-island-08305 Config Vars DATABASE_URL: postgres://ytfeiommjakmxb...amazonaws.com:5432/dcf99cdrgdaqba SECRET_KEY: 6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt%
通常,您需要portfolio/settings.py顯式使用該變量,但由于您安裝了該django-heroku模塊,因此無需指定數據庫 URL 或用戶名和密碼。它會自動從環(huán)境變量中獲取數據庫 URL 并為您配置設置。
此外,您無需安裝數據庫驅動程序即可連接到 Heroku 提供的 PostgreSQL 實例。另一方面,最好針對生產環(huán)境中使用的相同類型的數據庫進行本地開發(fā)。它促進了您的環(huán)境之間的平等,并讓您利用給定數據庫引擎提供的高級功能。
安裝時django-heroku,它已經psycopg2作為傳遞依賴獲?。?/p>
(portfolio) $ pip list Package Version --------------- ------- asgiref 3.4.1 dj-database-url 0.5.0 Django 3.2.5 django-heroku 0.3.1 pip 21.1.3 psycopg2 2.9.1 pytz 2021.1 setuptools 56.0.0 sqlparse 0.4.1 whitenoise 5.2.0
psycopg2是 PostgreSQL 數據庫的 Python 驅動程序。由于驅動程序已經存在于您的環(huán)境中,您可以立即開始在您的應用程序中使用 PostgreSQL。
在免費的業(yè)余愛好開發(fā)計劃中,Heroku 施加了一些限制。您最多可以有 10,000 行,這些行必須適合 1 GB 的存儲空間。與數據庫的連接不能超過 20 個。沒有緩存,性能受到限制,以及許多其他限制。
您可以隨時使用該heroku pg命令查看有關 Heroku 配置的 PostgreSQL 數據庫的詳細信息:
$ heroku pg === DATABASE_URL Plan: Hobby-dev Status: Available Connections: 1/20 PG Version: 13.3 Created: 2021-07-02 08:55 UTC Data Size: 7.9 MB Tables: 0 Rows: 0/10000 (In compliance) - refreshing Fork/Follow: Unsupported Rollback: Unsupported Continuous Protection: Off Add-on: postgresql-trapezoidal-06380
此簡短摘要包含有關當前連接數、數據庫大小、表數和行數等的信息。
在下面的小節(jié)中,您將了解如何對 Heroku 上的 PostgreSQL 數據庫做一些有用的事情。
更新遠程數據庫架構
當您在 Django 應用程序中定義新模型時,您通常會創(chuàng)建新的遷移文件并將它們應用于數據庫。要更新遠程 PostgreSQL 實例的架構,您需要像以前一樣運行相同的遷移命令,僅在 Heroku 環(huán)境中運行。稍后您將看到推薦的執(zhí)行此操作的方法,但現在,您可以手動運行適當的命令:
$ heroku run python manage.py migrate Running python manage.py migrate on ? polar-island-08305... up, run.1434 (Free) Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK (...)
該run插件會啟動一個稱為一次性 dyno的臨時容器,它類似于可以訪問應用程序源代碼及其配置的Docker容器。由于 dynos 正在運行 Linux 容器,您可以在其中之一中執(zhí)行任何命令,包括交互式終端會話:
$ heroku run bash Running bash on ? polar-island-08305... up, run.9405 (Free) (~) $ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: No migrations to apply.
在臨時 dyno 中運行Bash shell是檢查或操作 Heroku 應用程序狀態(tài)的常見做法。您可以將其視為登錄到遠程服務器。唯一的區(qū)別是您正在啟動一個一次性虛擬機,其中包含您項目文件的副本并接收與您的實時 Web dyno 相同的環(huán)境變量。
但是,這種運行數據庫遷移的方式并不是最可靠的,因為您可能會忘記它或在此過程中犯錯誤。您最好Procfile通過添加突出顯示的行來自動執(zhí)行此步驟:
web: python manage.py runserver 0.0.0.0:$PORT release: python manage.py migrate
現在,每次發(fā)布新版本時,Heroku 都會處理所有待處理的遷移:
$ git commit -am "Automate remote migrations" $ git push heroku master (...) remote: Verifying deploy... done. remote: Running release command... remote: remote: Operations to perform: remote: Apply all migrations: admin, auth, contenttypes, sessions remote: Running migrations: remote: No migrations to apply. To https://git.heroku.com/polar-island-08305.git d9f4c04..ebe7bc5 master -> master
它仍然允許您選擇是否實際進行任何新遷移。當您進行可能需要一段時間才能完成的大型遷移時,請考慮啟用維護模式以避免在用戶使用您的應用時損壞或丟失數據:
$ heroku maintenance:on Enabling maintenance mode for ? polar-island-08305... done
Heroku 將在維護模式下顯示此友好頁面:
維護模式下的 Heroku 應用程序
heroku maintenance:off完成遷移后,不要忘記禁用它。
填充數據庫
您已經通過應用遷移為 Django 模型創(chuàng)建了數據庫表,但這些表大部分仍為空。您遲早會希望將一些數據放入其中。與數據庫交互的最佳方式是通過Django 管理界面。要開始使用它,您必須首先遠程創(chuàng)建一個超級用戶:
$ heroku run python manage.py createsuperuser Running python manage.py createsuperuser on ? polar-island-08305... up, run.2976 (Free) Username (leave blank to use 'u23948'): admin Email address: jdoe@company.com Password: Password (again): Superuser created successfully.
請記住在連接到遠程 Heroku 應用程序的數據庫中創(chuàng)建超級用戶,方法是在相應的命令前加上heroku run。為超級用戶提供唯一名稱和安全密碼后,您將能夠登錄到 Django 管理視圖并開始向數據庫添加記錄。
您可以通過訪問/admin放置在您唯一的 Heroku 應用程序域名之后的路徑來訪問 Django 管理視圖,例如:
https://polar-island-08305.herokuapp.com/admin/
以下是登錄后的外觀:
Heroku 上的 Django 管理站點
直接操作遠程數據庫的一種選擇是DATABASE_URL從 Heroku獲取變量并解密其各個組件以通過您最喜歡的 SQL 客戶端進行連接?;蛘?,Heroku CLI 提供了一個方便的psql插件,它的工作方式類似于標準的 PostgreSQL 交互式終端,但不需要安裝任何軟件:
$ heroku psql --> Connecting to postgresql-round-16446 psql (10.17 (Ubuntu 10.17-0ubuntu0.18.04.1), server 13.3 (Ubuntu 13.3-1.pgdg20.04+1)) WARNING: psql major version 10, server major version 13. Some psql features might not work. SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help. polar-island-08305::DATABASE=> SELECT username, email FROM auth_user; username | email ----------+------------------ admin | jdoe@company.com (1 row)
請注意該heroku psql命令如何將您連接到 Heroku 基礎架構上的正確數據庫,而無需任何詳細信息,例如主機名、用戶名或密碼。此外,您無需安裝 PostgreSQL 客戶端即可使用 SQL 查詢其中一個表。
作為 Django 開發(fā)人員,您可能習慣于依賴其對象關系映射器 (ORM)而不是手動鍵入 SQL 查詢。您可以通過在遠程 Heroku 應用程序中啟動交互式Django shell來再次使用 Heroku CLI?:
$ heroku run python manage.py shell Running python manage.py shell on ? polar-island-08305... up, run.9914 (Free) Python 3.9.6 (default, Jul 02 2021, 15:33:41) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole)
接下來,導入內置User模型并使用其管理器從數據庫中檢索相應的用戶對象:
>>>
>>> from django.contrib.auth.models import User >>> User.objects.all()
您應該會看到您之前創(chuàng)建的超級用戶。使用 Django shell,您可以使用面向對象的 API 查詢連接的數據庫。如果你不喜歡默認的 shell,那么你可以安裝一個替代的 Python REPL,比如IPython或bpython,Django 會識別它。
好吧,就是這樣!您在 Heroku 上托管了一個成熟的 Django 項目,并連接了一個關系數據庫。例如,您現在可以在 GitHub 上的README文件中共享其公共鏈接,讓世界欣賞您的工作。
結論
現在,您知道如何將您的想法轉化為您的朋友和家人會喜歡的實時 Web 應用程序。也許,人力資源部門的某個人可能會偶然發(fā)現您的一個項目并為您提供工作。注冊一個免費的 Heroku 帳戶來托管您的 Django 代碼是進入云計算世界的最佳方式之一。
在本教程中,您學習了如何:
在幾分鐘內讓您的Django項目上線
使用Git將您的項目部署到 Heroku
使用Django-Heroku集成庫
將你的 Django 項目連接到一個獨立的關系數據庫
管理配置以及敏感數據
您可以通過以下鏈接下載最終源代碼以及各個步驟的快照:
下一步
當談到 Heroku 的可能性時,本教程幾乎沒有觸及表面。它有意掩蓋了許多細節(jié),但 Heroku 可以提供更多,即使免費帳戶有限。如果您想讓您的項目更上一層樓,請考慮以下一些想法:
配置一個 WSGI 服務器:在公開你的項目之前,首先要做的是用更安全和性能更好的東西替換內置的 Django 開發(fā)服務器,比如 Gunicorn。Django 提供了一個方便的部署清單,其中包含您可以通過的最佳實踐。
啟用日志記錄:在云中運行的應用程序并不直接由您控制,這使得調試和故障排除比在本地計算機上運行更加困難。因此,您應該使用 Heroku 的附加組件之一啟用日志記錄。
提供靜態(tài)文件:使用 Amazon S3 或內容交付網絡 (CDN) 等外部服務來托管 CSS、JavaScript 或圖片等靜態(tài)資源。這可能會顯著卸載您的 Web 服務器并利用緩存來加快下載速度。
提供動態(tài)內容:由于 Heroku 的臨時文件系統(tǒng),用戶提供給您的應用程序的數據無法作為本地文件持久化。使用關系數據庫甚至 NoSQL 數據庫并不總是最有效或最方便的選擇。在這種情況下,您可能希望使用 Amazon S3 等外部服務。
添加自定義域:默認情況下,您的 Heroku 應用程序托管在該.herokuapp.com域中。雖然它對于業(yè)余項目來說快速且有用,但您可能希望在更專業(yè)的環(huán)境中使用自定義域。
添加 SSL 證書:當您定義自定義域時,您必須提供相應的 SSL 證書才能通過 HTTPS 公開您的應用程序。這是當今世界的必備品,因為一些網絡瀏覽器供應商已經宣布他們將來不會顯示不安全的網站。
與 GitHub 聯(lián)系:當拉取請求合并到主分支時,您可以通過允許 GitHub 觸發(fā)新的構建和發(fā)布來自動化您的部署。這減少了手動步驟的數量并確保您的源代碼安全。
使用 Heroku 管道:?Heroku 鼓勵您以最少的努力遵循最佳實踐。它通過選擇性地自動創(chuàng)建測試環(huán)境來提供持續(xù)交付工作流。
啟用自動縮放:隨著您的應用程序的增長,它將需要面對不斷增長的資源需求。大多數電子商務平臺每年都會在圣誕節(jié)前后出現流量高峰。該問題的當代解決方案是水平擴展,它以多個副本復制您的應用程序以滿足需求。自動縮放可以在需要時響應此類峰值。
拆分為微服務:當您的項目由多個獨立的微服務組成時,水平擴展最有效,這些微服務可以單獨擴展。這樣的架構可以縮短開發(fā)時間,但也帶來了一系列挑戰(zhàn)。
從 Heroku 遷移:一旦您開始接觸 Heroku,您可能會考慮遷移到另一個云平臺,例如Google App Engine,甚至是底層的 Amazon 基礎設施以降低成本。
繼續(xù)瀏覽Heroku 網站上的官方文檔和Python 教程,以找到有關這些主題的更多詳細信息。
Django Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。