日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目

發(fā)布時間:2025/4/5 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

      • Django項目:學習筆記web網(wǎng)頁
      • 項目部署
      • 參考

自己部署的網(wǎng)站,還是小有成就感的,畢竟踩過很多坑,實戰(zhàn)技能也有些許進步。

網(wǎng)站鏈接:http://lishizheng.herokuapp.com/

Django項目:學習筆記web網(wǎng)頁

建立虛擬環(huán)境

要使用Django,首先需要建立一個虛擬工作環(huán)境。虛擬環(huán)境是系統(tǒng)的一個位置,可在其中安裝包,并將之與其他Python包隔離。

為項目新建一個目錄,將其命名為learning_log,再在終端中切換到這個目錄,并執(zhí)行如下命令創(chuàng)建一個虛擬環(huán)境

python -m venv ll_env

這里運行了模塊venv,并使用它創(chuàng)建了一個名為ll_env的虛擬環(huán)境。

激活虛擬環(huán)境

如果你使用的是Windows系統(tǒng),請使用命令

ll_env\Scripts\activate

要停止使用虛擬環(huán)境,可執(zhí)行命令

deactivate

安裝Django

激活虛擬環(huán)境后,執(zhí)行如下命令安裝Django:

pip install django

在Django中新建項目

在虛擬環(huán)境依然處于活動狀態(tài)的情況下(ll_env包含在圓括號內(nèi)),執(zhí)行如下命令新建一個項目

django-admin startproject learning_log .

注意:千萬別忘了這個句點,否則部署應用程序時將遭遇一些配置問題。如果忘記了這個句點,要刪除已創(chuàng)建的文件和文件夾(ll_env除外),再重新運行這個命令。

目錄learning_log包含4個文件,最重要的是settings.py、urls.py和wsgi.py。

  • 文件settings.py指定Django如何與系統(tǒng)交互以及如何管理項目。在開發(fā)項目的過程中,我們將修改其中一些設置,并添加一些設置。
  • 文件urls.py告訴Django,應創(chuàng)建哪些頁面來響應瀏覽器請求。
  • 文件wsgi.py幫助Django提供它創(chuàng)建的文件,這個文件名是Web服務器網(wǎng)關接口(Web server gatewayinterface)的首字母縮寫。

創(chuàng)建應用程序

Django項目由一系列應用程序組成,它們協(xié)同工作讓項目成為一個整體。

命令startapp appname讓Django搭建創(chuàng)建應用程序所需的基礎設施。

比如

(ll_env)learning_log$ python manage.py startapp learning_logs

定義模型

模型告訴Django如何處理應用程序中存儲的數(shù)據(jù)。在代碼層面,模型就是一個類,就像前面討論的每個類一樣,包含屬性和方法。

激活模型

要使用這些模型,必須讓Django將前述應用程序包含到項目中。為此,打開settings.py(它位于目錄learning_log/learning_log中),其中有個片段告訴Django哪些應用程序被安裝到了項目中并將協(xié)同工作。

當需要修改“學習筆記”管理的數(shù)據(jù)時,都采取如下三個步驟:修改models.py,對learning_logs調用makemigrations,以及讓Django遷移項目。

創(chuàng)建頁面
使用Django創(chuàng)建頁面的過程分三個階段:定義URL,編寫視圖和編寫模板。按什么順序完成這三個階段無關緊要,但在本項目中,總是先定義URL模式。

  • URL模式描述了URL是如何設計的,讓Django知道如何將瀏覽器請求與網(wǎng)站URL匹配,以確定返回哪個頁面。
  • 每個URL都被映射到特定的視圖——視圖函數(shù)獲取并處理頁面所需的數(shù)據(jù)。
  • 視圖函數(shù)通常使用模板來渲染頁面,而模板定義頁面的總體結構。

urls.py

"""定義learning_logs的URL模式""" from django.urls import path from . import viewsapp_name = 'learning_logs' urlpatterns = [# 主頁path('', views.index, name='index'), ]

為指出當前位于哪個urls.py文件中,在該文件開頭添加一個文檔字符串。接下來,導入了函數(shù)path,因為需要使用它將URL映射到視圖。我們還導入了模塊views,其中的句點讓Python從當前urls.py模塊所在的文件夾導入views.py。變量app_name讓Django能夠將這個urls.py文件同項目內(nèi)其他應用程序中的同名文件區(qū)分開來。在這個模塊中,變量urlpatterns是一個列表,包含可在應用程序learning_logs中請求的頁面。

實際的URL模式是對函數(shù)path()的調用,這個函數(shù)接受三個實參。第一個是一個字符串,幫助Django正確地路由(route)請求。收到請求的URL后,Django力圖將請求路由給一個視圖。為此,它搜索所有的URL模式,找到與當前請求匹配的那個。Django忽略項目的基礎URL(http://localhost:8000/),因此空字符串(’’)與基礎URL匹配。其他URL都與這個模式不匹配。如果請求的URL與任何既有的URL模式都不匹配,Django將返回一個錯誤頁面。

path()的第二個實參指定了要調用view.py中的哪個函數(shù)。請求的URL與前述正則表達式匹配時,Django將調用view.py中的函數(shù)index()。第三個實參將這個URL模式的名稱指定為index,讓我們能夠在代碼的其他地方引用它。每當需要提供到這個主頁的鏈接時,都將使用這個名稱,而不編寫URL。

第19章的部分成果

讓用戶擁有自己的數(shù)據(jù)

使用@login_required限制訪問

Django提供了裝飾器@login_required,讓你能夠輕松地只允許已登錄用戶訪問某些頁面。裝飾器(decorator)是放在函數(shù)定義前面的指令,Python在函數(shù)運行前根據(jù)它來修改函數(shù)代碼的行為。

將數(shù)據(jù)關聯(lián)到用戶

需將最高層的數(shù)據(jù)關聯(lián)到用戶,更低層的數(shù)據(jù)就會自動關聯(lián)到用戶。例如,在項目“學習筆記”中,應用程序的最高層數(shù)據(jù)是主題,而所有條目都與特定主題相關聯(lián)。只要每個主題都歸屬于特定用戶,就能確定數(shù)據(jù)庫中每個條目的所有者。

部分成果:

第20章開始

項目部署

這里用的是《python編程從入門到實踐(第二版)》

requirements.txt內(nèi)容:

asgiref==3.3.4 beautifulsoup4==4.9.3 Django==3.2 django-bootstrap4==3.0.0 django-heroku==0.3.1 gunicorn==20.1.0 psycopg2>=2.6.1 pytz==2021.1 soupsieve==2.2.1 sqlparse==0.4.1

注意:筆者剛開始git push heroku master的時候,老是報錯,原來是因為某個文件中heroku寫成了herocu,舉例如下:

remote: File "/tmp/build_b999a8c2/learning_log/settings.py", line 142, in <module> remote: django_herocu.settings(locals()) remote: NameError: name 'django_herocu' is not defined remote: remote: ! Error while running '$ python manage.py collectstatic --noinput'. remote: See traceback above for details. remote: remote: You may need to update application code to resolve this error. remote: Or, you can disable collectstatic for this application: remote: remote: $ heroku config:set DISABLE_COLLECTSTATIC=1 remote: remote: https://devcenter.heroku.com/articles/django-assets remote: ! Push rejected, failed to compile Python app. remote: remote: ! Push failed remote: Verifying deploy... remote: remote: ! Push rejected to vast-oasis-96898. remote: To https://git.heroku.com/vast-oasis-96898.git! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'https://git.heroku.com/vast-oasis-96898.git'

修改之后,使用命令git commit -am "一段話"重新commit。
然后執(zhí)行git push heroku master,項目就部署好了。

remote: -----> $ python manage.py collectstatic --noinput remote: 128 static files copied to '/tmp/build_c3a2293e/staticfiles', 406 post-processed. remote: remote: -----> Discovering process types remote: Procfile declares types -> web remote: remote: -----> Compressing... remote: Done: 73.9M remote: -----> Launching... remote: Released v5 remote: https://vast-oasis-96898.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done. To https://git.heroku.com/vast-oasis-96898.git* [new branch] master -> master

核實正確地啟動了服務器進程,請執(zhí)行命令heroku ps:

(ll_env) PS D:\user\文檔\python\python_work\learning_log> heroku ps 【1】Free dyno hours quota remaining this month: 550h 0m (100%) Free dyno usage for this app: 0h 0m (0%) For more information on dyno sleeping and how to upgrade, see: https://devcenter.heroku.com/articles/dyno-sleeping【2=== web (Free): gunicorn learning_logs.wsgi --log-file - (1) web.1: crashed 2021/04/15 16:54:59 +0800 (~ 5m ago)

輸出指出了在接下來的一個月內(nèi),項目還可在多長時間內(nèi)處于活動狀態(tài)【1】。編寫本書時,Heroku允許免費部署在一個月內(nèi)最多有550小時處于活動狀態(tài)。項目的活動時間超過這個限制后,將顯示標準的服務器錯誤頁面,我們稍后將定制這個錯誤頁面。在【2】處,我們發(fā)現(xiàn)啟動了Procfile指定的進程。

heroku login 出現(xiàn) Ip mismatch 怎么辦? ,先Ctrl+C終止,然后輸出

heroku login -i

然后會提示你輸入heroku 的郵箱和密碼,然后就登錄進來。

然后輸入 heroku open,結果出現(xiàn)Application error

解決方法:
輸入heroku logs --tail
然后找到錯誤:顯示找不到learning_logs.wsgi,果然,這是筆者的錯誤,正確的應該是learning_log.wsgi,多寫了s,修改完Procfile文件,然后重新提交。

修改后:

然后重新提交

(ll_env) PS D:\user\文檔\python\python_work\learning_log> git status On branch master Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: Procfileno changes added to commit (use "git add" and/or "git commit -a") (ll_env) PS D:\user\文檔\python\python_work\learning_log> git commit -am "Procfile, modify learning_logs.wsgi into learning_log.wsgi" warning: LF will be replaced by CRLF in Procfile. The file will have its original line endings in your working directory [master f5db365] Procfile, modify learning_logs.wsgi into learning_log.wsgi1 file changed, 1 insertion(+), 1 deletion(-) (ll_env) PS D:\user\文檔\python\python_work\learning_log> git status On branch master nothing to commit, working tree clean (ll_env) PS D:\user\文檔\python\python_work\learning_log>

然后重新部署到heroku

git push heroku master

然后繼續(xù)執(zhí)行:heroku open

大功告成

在Heroku上建立數(shù)據(jù)庫

heroku run python manage.py migrat

果訪問這個部署的應用程序,將能夠像在本地系統(tǒng)上一樣使用它,但看不到在本地部署中輸入的任何數(shù)據(jù)(包括超級用戶賬戶),因為它們還沒有被復制到在線服務器。通常,不將本地數(shù)據(jù)復制到在線部署中,因為本地數(shù)據(jù)通常是測試數(shù)據(jù)。

你可分享“學習筆記”的Heroku URL,讓任何人都可使用它。

目前自己搭建的網(wǎng)頁的url地址為 :https://murmuring-escarpment-91471.herokuapp.com/
然后注冊了用戶,寫了自己的Learning Log。

參考

[1]埃里克·馬瑟斯.Python編程-從入門到實踐[M].北京:人民郵電出版社,2016

總結

以上是生活随笔為你收集整理的python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。