「Django框架」入門學習總結
Django
基本上用了10天的時間,我用python3.6 + django框架學習了一些入門知識,我把它總為:對一個項目從無到有的開發,前后端之間的交互,過程中用到的技術棧作為核心總結,方便以后查閱,供大家參考,如有錯誤,請與我交流指正。
目錄如下:
- 什么是MVT模版?
- ORM模型又是什么
- 一個新的項目里有什么東西?它們怎么進行溝通?
- 模型遷移是在做什么?
- 基本的開發流程?
- 用戶狀態保持:session與cookies?
- GET與POST
- CSRF攻擊行為
- URL的反向解析
- ajax的執行過程?
- 靜態文件顯示?
- 中間件?
1. 什么是MVT?
Django中稱為MVT的東西,其實在別的地方也叫做MVC,是由:
- 模型(model)
- 視圖(views)
- 模版(templates)&(control)
組成的,不管是MVT還是MVC,它追求到的本質,就是解耦,讓每一個模塊可以之間的配合可更換,可擴展,不用為了升級版本發愁。
2. ORM模型又是什么?
ORM模型解決了這樣的事情,當你想在程序中定義一個類,例如同學類,同學類當然有自己的屬性例如,性別、年齡等等,那么我們就需要在程序中定義好這個類,之后又要在數據庫中建立起這樣的表,所以,我們把這樣一件事情重復了兩遍,第一遍是在程序中定義這個類,第二遍是在數據庫中定義儲存它的表。
這樣太麻煩了,不如我們在程序中直接操作數據庫,ORM就是做了這樣一件事情,只寫一遍,程序中有了這個類,對應地,數據庫中也有了存儲這個類的表,完美。
總結一下:ORM的作用是與關系型數據庫進行交互,把修改、查詢、刪除等的操作轉換為數據庫的語句。
3. 一個新的項目里有什么東西?它們怎么進行溝通?
最基本的,一個Django框架里有的,文件,經常被我們用到的有兩類文件:
- 項目級文件
- settings.py
- urls.py
- manage.py - 應用級文件
- admin.py
- models.py
- urls.py
- views.py
- templates目錄(存放HTML)
- static目錄(存放圖、js、css文件)
setting.py
項目級文件中的內容可以管理全局配置,在settings.py中,他可以管理數據庫類型,用到了什么中間件,注冊的APP,路徑內容包括了靜態文件路徑,模版路徑等等
urls.py
urls.py文件有兩個,一個屬于項目級路徑,一個屬于應用級路徑,項目級url.py中定義的正則鏈接,這個里面只有匹配的開始,并沒有結束。所以,url.py的匹配可以被分為兩次:
項目級文件的url.py中進行第一次匹配,匹配成功之后,進入應用級url.py第二次匹配,這回的正則匹配有結束符號,說明匹配結束,鏈接到精確地址,完成url的管理
views.py
視圖模塊中,接收url的請求,獲取并得到數據,調用HTML文件,加載數據,輸出響應
models.py
因為model中的內容為定義項目用到對象實體,所以這個文件中涉及到ORM模型,負責與數據庫進行交互,生成表,儲存數據。
接下來的問題:它們怎么進行溝通的?怎么描述?
可以先從urls說起,當我們點入一個匹配好的鏈接,瀏覽器會給我們呈現出來鏈接對應的內容,這個過程可以描述為:
- 匹配URL成功,調用這個URL對應的視圖,
- 視圖本質上是一個定義好的方法,它獲取數據,最后返回給HTML模板
- 由模版通過一定格式加載視圖返回的數據,得到最終結果
- 雖然這個過程沒有體現models,但是可以明確的是,它定義的類在搜索數據時出現在視圖中
4. 模型的遷移在做些什么?
python manage.py makemigrations & python manage.py migrate
描述:
- 前面是將model中定義好的類生成migration
- 后者將新版本的遷移文件執行,更新數據庫
5. 一個項目的基本開發流程?
- 創建項目需要的虛擬環境
- 創建項目 diango-admin stratproject xxx
- 創建應用 django-admin stratapp xxx
- 在model.py中定義好模型類,并遷移
- 定義視圖
- 配置URL
- 創建HTML模板
6. 用戶狀態保持:session與cookies?
它們是為了什么而創建的? session和cookies解決了這樣一個問題:因為http協議是無狀態的,它體現在了不會記錄你的交互信息,例如你的登陸密碼,它們被http記錄下來的話那就太糟糕了,所以對于你而言,每一次請求都是新的請求,session與cookies允許你保持一個狀態,讓服務器明白,在網頁執行請求的人,就是你。
這里有一個應用例子,每次我登錄了CSDN的時候就會有廣告,而且推送的還挺精確,可是CSDN怎么知道這個人是我呢?答案是,CSDN的網頁里,在廣告區內嵌了一塊屬于淘寶的網頁,雖然CSDN沒有權限拿到你曾經去過的淘寶網頁的cookies,但是通過內嵌網頁的方式,淘寶會查詢本地被記錄過的cookies,所以這塊網頁就給我推薦了曾經我買不起的奧特曼,現在還是買不起哈哈。
session:儲存在服務器的信息,比如淘寶的購物車,有很多人在淘寶的服務器購物,服務器怎么知道這個人買了什么樣的東西呢?回答是為每個人創建一個專屬的session,用于標識用戶、記錄用戶的狀態,這個信息不儲存在本地。
cookies:儲存在瀏覽器的文本信息,cookie是由訪問的服務器產生的文本信息,它會由服務器發送給瀏覽器,接著瀏覽器會把它保存到本地,下次請求相同網站時就發送該cookie到服務器,我就不用再輸密碼啦
7. GET(讀取)與POST(執行)
GET:用來讀取數據,不對讀取到的數據進行操作,數據可以被緩存,GET把參數包含在URL中
POST:請求服務器做一件事情,數據不能被緩存,POST把參數包含在request body中傳遞
8. CSRF攻擊行為
csrf:跨站請求偽造,攻擊的方式為:我獲取了一個用戶已經認證的網址A,之后內嵌入一個危險鏈接網頁B,點進這個鏈接B后,B又會請求我認證過的A網址,這時,由于cookie是瀏覽器自動加載的,所以A網站并不能區分,接下來的操作時用戶的操作,還是危險網站B的操作。
解決方式一:csrf_token,利用cookie解決,但是如果將生成的cookie也復制過去,則失效
解決方式二:驗證碼動態驗證,用到了session和POST表單,進行對比判斷
9. URL的反向解析
談反向解析就不得不談正向解析,URL的正向解析是:
發起URL請求,django根據URL解析,調用視圖,返回客戶端
URL的反響解析是,通過一個視圖的名字,加上一些參數和值,逆向獲取URL的過程,當我們需要調用這個URL時,并不需要真的調用這個URL自己,而是調用我們給這個URL起好的名字,當URL變化時,我們不需要修改,因為我們調用的是這個URL的名字,只要名字不變,鏈接與鏈接之間銜接是不會出錯的。
10. ajax的執行過程?
10.1 ajax是干嘛的?
它是為了執行異步請求的
10.2 什么是異步請求呢?怎么描述它?
要知道什么是異步請求,先要對同步請求有明確認識:同步請求就是,用戶提交表單,瀏覽器刷新頁面,也就是一次HTTP請求對應著一個頁面。
接下來異步請求來了哈哈,異步請求可以描述為:瀏覽器想讓用戶停留在當前頁面中,同時發送新的HTTP請求,返回數據并呈現在當前頁面,這樣給我的感覺就是停留在了當前頁面,但是數據還是不斷的刷新出來,例如省、市、區的選擇,就是這樣一個過程。
或者可以被粗暴的理解成,當前頁面的局部刷新。
11. 靜態文件顯示?
靜態文件的顯示首先要去項目級管理工具中配置setting.py里面的內容,靜態文件目錄,加到最后即可
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
接下來要做的事情就是,需要新建static文件目錄,文件目錄與manage.py同級,最后,在HTML中配置好靜態文件,例如這張地堡男孩圖片。
我把這張圖片上傳到CSDN的服務器中,服務器將地堡男孩圖片上傳到靜態文件中,下次再打開這篇博客,這張圖片就又會顯示出來。
12. 中間件?
最后一個問題,中間件是怎么來的呢?
中間件是面向切面編程思想的產物,怎么簡潔的理解面向切面編程呢?
我的理解就是,在M、V、T三個模塊進行互相調用時,我們在中間加上一些東西,例如“|”那么M、V、T就成為了,M|V|T
一個例子,例如M與V模塊之間通信報錯,如果我想自定義報錯信息,那么就可以在他們之間啟用報錯的中間件,自定義報錯內容,或者我想修改T中的模版編碼信息,我就可以在V與T的中間件重新定義編碼信息,得到我想要的編碼模版,而不需要打開T模版中的內容,逐個修改。
這就是中間件的好處。
另外我還接觸到一點,就是csrf,當注銷掉MIDDLEWARE_CLASSES中的
'django.middleware.csrf.CsrfViewMiddleware',
時,django就會忽略掉csrf攻擊。
遇到了一個解決不了的問題:瀏覽器雖然可以讀取到整個的json文件,但是并不能返回給我搜索的結果,也不報錯,就是一個空空的字典,’{ }’ …
以上,就是最近10天的django學習總結的內容了,接下來準備實戰天天生鮮項目,哈哈。
智能推薦
python--Django 13 Django框架 總結
Django框架主要涉及的內容如下: 模板 視圖 路由 ORM cook和session 中間件 ajax form auth 1 模板 變量 {{ }} 變量的傳遞示例 標簽 {% %} 過濾器 | 在Django的模板語言中,通過使用 過濾器 來改變變量的顯示 過濾器的語法: {{ value|filter_name:參數 }} ...
Django框架學習2
1.新建一個應用(app) 一個django項目可以包含多個app,同樣在manage.py目錄下輸入命令: 新建應用后,一定要在setting.py腳本里面,把剛才新建的應用名稱添加到INSTALLED_APPS里 新建的 app 如果不加到 INSTALL_APPS 中的話, django 就不能自動找到app中的模板文件(app-name/templates/下的文件)和靜態文件(app-n...
django框架學習一
新建django項目步驟 1.在pycharm中創建django項目 2.創建app應用(tools->run manage.py task->輸入startapp 名字) 初識urls.py與views.py urls.py url配置文件,即每個網頁對應的地址(對應是views里面的index) url配置格式: 詳細可以參考https://www.cnblogs.com/hsku...
Django框架學習3
1.創建用戶,登錄admin后臺 在manage.py目錄下執行cmd 命令 訪問admin后臺,1.啟動服務器 ,python3 manage.py runserver 2.url.py中添加 規則 path('admin/', admin.site.urls),已有admin規則的可以忽略 3.訪問http://127.0.0.1:8000/admin 登錄剛才創建的賬號密碼即可。...
django框架學習記錄
初始化django項目: 配置 settings文件: INSTALLED_APPS**冊app:‘booktest.apps.BooktestConfig’ MIDDLEWARE 注釋掉csrf的中間件,可以提交POST請求 TEMPLATES 下創建templates并且配置模板文件 ‘DIRS’: [os.path.join(BASE_DIR,...
猜你喜歡
Django框架的學習
啟動流程 安裝: 創建新項目 目錄結構及說明 修改配置文件: setting.py 修改Debug日志:DEBUG = True 改為 DEBUG = False 修改語言顯示:LANGUAGE_CODE = 'en-us' 改為LANGUAGE_CODE = 'zh-cn' 修改數據庫:DATABASES 修改時區顯示:TIME_ZONE = 'UTC' 改為TIME_ZONE = 'Asia/...
Django框架學習1
python Django框架學習1 Django框架學習1 Django是一個開放源代碼的Web應用框架,由Python寫成。采用了MTV的框架模式,即模型M,視圖V和模版T。它最初是被開發來用于管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的,即是CMS(內容管理系統)軟件。并于2005年7月在BSD許可證下發布。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。...
Django框架學習2
python Django框架學習2 Django框架學習2 項目實例:云端留言板 需求分析: 1、提交留言功能區 1、發送方 2、接收方 3、消息內容 2、獲取留言功能區 1、接收方 2、消息內容獲取 本次項目的數據采用本地文件存儲 web端采用簡單的html5+js編寫 最終實現如下圖: 創建新項目: django-admin startproject 留言板 生成工程文件留言板,進入留言板工...
Django框架學習4
python Django框架學習4 Django框架學習4 本篇文章主要講述django的模型類的創建、遷移和前端與數據庫的交互。 模型類的創建: 工程中的模型類的位置在app目錄下的models.py文件中,模型類里面定義的類屬性是為了生成數據庫里面的表結構使用的,簡言之,這個文件中要定義這個app中所有要用到的數據,并根據關聯性,把它們封裝在不同的類(數據表)當中。一個模型類對應數據庫中一張...