python學習筆記 Day 19 Web應用程式 - Django入門
Day 19 Django入門
-
前言
- Django是一個web應用框架,http://djangoproject.com/,在此框架內,可以開發互動式網站;
- 個人認為這篇文章將Django講解的比較清楚:
Django框架全面講解
文中的配圖較模糊,重新畫了一份。
- 要理解Django,首先要理解MVC模式:
- M,Model,模型,用於與資料庫互動的業務規則並相應View的請求而返回指定資料,通俗的說,Model以程式碼的形式實現了桌面資料庫(如SQL Server Enterprise或Access或Oracle)中定義資料庫表、根據SQL語句查詢資料等功能;
- V,View,檢視響應使用者(網頁)的請求,從Model提取的資料,將資料填入模版並將此網頁反饋給使用者。
- C,Control,控制檯,接受外部使用者的操作,根據操作訪問模型獲取資料,並呼叫“檢視”顯示這些資料。
- Django也是一個MVC框架。但是在Django中,控制器接受使用者輸入的部分由框架自行處理,所以 Django 裡更關注的是模型(Model)、模板(Template)和檢視(Views),稱為 MTV模式:
- M 代表模型(Model),即資料存取層。 該層處理與資料相關的所有事務: 如何存取、如何驗證有效性、包含哪些行為以及資料之間的關係等。(參考上面對Model的定義)
- T 代表模板(Template),即表現層。 該層處理與表現相關的決定: 如何在頁面或其他型別文件中進行顯示。(白話文:模版其實就是網頁框架,只不過沒有資料)
- V 代表檢視(View),即以程式碼形式存在的業務邏輯層。 該層包含存取模型及調取恰當模板的相關邏輯。 你可以把它看作模型與模板之間的橋樑。(白話文:View響應使用者的請求,呼叫Model的函式獲取資料,然後再呼叫相應的模版(由URL)指定,填寫資料,形成最終的HTML檔案,再返回使用者顯示)
-
正式進入DJango學習
- Django 路由系統:
- URL配置(URLconf)就像Django 所支撐網站的目錄。它的本質是URL模式以及要為該URL模式呼叫的檢視函式之間的對映表;你就是以這種方式告訴Django,對於這個URL呼叫這段程式碼,對於那個URL呼叫那段程式碼。URL的載入是從配置檔案中開始。
urlpatterns = [ url(正則表示式, view函式, 引數, 別名) ] ```
引數說明:
# 一個正則表示式字串 # 一個可呼叫物件,通常為一個檢視函式或一個指定檢視函式路徑的字串 # 可選的要傳遞給檢視函式的預設引數(字典形式) # 一個可選的name引數
- 建立虛擬環境
- 新建立一個目錄用於構建Django應用:
$ mkdir learning_log
- 測試是否安裝了虛擬環境
learning_log$ python -m vent ll_env
如果沒有任何錯誤提示,直接返回命令提示狀態,說明已安裝,否則,需要安裝虛擬環境。
- 安裝虛擬環境
$ pip install --user virtualenv Collecting virtualenv Downloading https://files.pythonhosted.org/packages/7c/17/9b7b6cddfd255388b58c61e25b091047f6814183e1d63741c8df8dcd65a2/virtualenv-16.1.0-py2.py3-none-any.whl (1.9MB) 100% |████████████████████████████████| 1.9MB 5.9MB/s Installing collected packages: virtualenv The script virtualenv is installed in '/Users/******/Library/Python/3.7/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
在windows環境下,執行:
python -m pip install --user virtualenv
提示需要將virtualenv路徑新增到系統路徑:
$ sudo vim /etc/paths
- 建立虛擬環境
$ virtualenv ll_env
- 啟用虛擬環境
$ source ll_env/bin/activate
Windows環境下執行下面的命令啟用虛擬環境:
ll_env\Scripts\activate
- 安裝Django:建立並激活虛擬環境後就可以安裝Django了
$ pip install Django
- 1 、建立專案,千萬別忘了命令列後面的那個點“.”
這裡,“專案“的概念,就是建立一個WEB伺服器。
$ django-admin.py startproject learning_log .
- 2、建立資料庫
這裡所建立的資料庫,是整個WEB伺服器的資料庫框架(類似於在Windows環境下,安裝好IIS後(建立‘專案‘),再安裝SQL Server),下文提到的“應用”所建立的資料庫,就是在這個WEB伺服器資料庫框架中建立資料庫。
python manage.py migrate
- 檢視專案(啟動伺服器)
python manage.py runserver
開啟瀏覽器,輸入127.0.0.1/8000
- 小結:1和2兩個步驟,分別建立了WEB伺服器(專案)並安裝好了資料庫框架,現在看一下learning_log目錄下的檔案:
__init__py, settings.py, urls.py, manage.py wsgi.py
其中,settings.py指定Django如何與剛剛建立好的WEB伺服器互動並管理該伺服器。URLS.py應該建立哪些網頁響應瀏覽器請求(該WEB伺服器下每個應用們都應該有不同的url入口)。manage.py用於專案管理,例如。新建應用程式,應用程式建立資料庫等。
- 建立應用程式
(ll_env)learning_log$ python manage.py startapp learning_logs
建立好一個名為“learning_logs“的應用程式,這時,在learning_log目錄下,多了一個資料夾learning_logs,該資料夾儲存應用learning_logs的所有內容。
- 3、定義模型
定義模型的過程,就是建立應用程式資料庫的過程。
編輯models.py檔案 - 4、啟用模型
修改learning_logs目錄中的settings.py檔案,然後在終端中執行:
(ll_env)learninglog$ python manage.py makemigrations learning_logs
- 5、遷移資料庫
$ python manage.py migrate
- 6、建立超級使用者
$ python manage.py createsuperuser
-
7、註冊模型
修改admin.py -
小結:步驟3、4、5完成了應用程式建立資料庫表的過程。步驟7完成了應用程式資料庫模型向專案的註冊過程。
-
8、定義模型Entry,並重復遷移和註冊(5、7)過程
修改model.py,定義Entry類。
定義Entry模型,相當於新建了一個數據庫表Entry,此表與Topic表是多對一的關係,即一個topic 的ID下可以關聯多個Entry。
此時,再訪問127.0.0.1:8000/admin,網站如下圖,可以看到裡面有兩個資料庫表;Entry和Topic。
-
建立網頁
建立網頁分三個階段:定義URL,編寫檢視(View)和編寫模版(Template)。
首先,必須定義URL模式,URL模式描述了URL是如何設計的,讓Django知道如何將瀏覽器請求與網站URL匹配。
每個URL請求都被對映到特定的檢視,檢視函式獲取並處理網頁所需資料。
每個檢視函式通常呼叫一個模版,模版函式生成瀏覽器能理解的網頁。
注意,解決’Specifying a namespace in include()withou providing an app_name)'錯誤:
python3 Django 環境下,如果你遇到在根目錄下urls.py中的include方法的第二個引數namespace新增之後就出錯的問題。請在[app_name]目錄下的urls.py中的urlpatterns前面加上app_name='[app_name]', [app_name]代表你的應用的名稱。 例如:app_name ='[blog]' --------------------- 作者:他說少年如歌 來源:CSDN 原文:https://blog.csdn.net/qq_27437781/article/details/80436799 版權宣告:本文為博主原創文章,轉載請附上博文連結! ``` ![Topics](https://img-blog.csdnimg.cn/20181222155131216.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N0ZXZlbnRpYW43Mg==,size_16,color_FFFFFF,t_70)
- Django 路由系統: