01.Django基礎
標簽: django
1,web項目工作流程
1.1 了解web程序工作流程
1.2 django生命周期
2,django介紹
-
目的:了解Django框架的作用和特點
-
作用:
- 簡便、快速的開發數據庫驅動的網站
-
Django的優勢
-
快速開發
-
MVT
-
功能齊全
-
Django學習版本: 1.11.11
-
-
思考:用django還是flask
- 開發數據驅動web網站(復雜業務邏輯)
- 數據分析后的結果展示界面, flask
- 快速成型應用上線, 就用django
3,Django設計模式(MVC/MTV)
-
目的: 了解什么是MVC, MTV
-
思考: 為什么要用設計模式
- 分工、解耦,讓不同的代碼塊之間降低耦合,增強代碼的可擴展性和可移植性,實現向后兼容。
-
MVC:
- M全拼為Model,主要封裝對數據庫層的訪問,對數據庫中的數據進行增、刪、改、查操作。
- V全拼為View,用于封裝結果,生成頁面展示的html內容。
- C全拼為Controller,用于接收請求,處理業務邏輯,與Model和View交互,返回結果。
-
MVT:
- M全拼為Model,與MVC中的M功能相同,負責和數據庫交互,進行數據處理。
- V全拼為View,與MVC中的C功能相同,接收請求,進行業務處理,返回應答。
- T全拼為Template,與MVC中的V功能相同,負責封裝構造要返回的html(
或者是json數據
)。
4,虛擬環境的安裝
-
目的: 學會創建新的虛擬環境
-
win10安裝
# 方法1:win10
pip install virtualenv
pip install virtualenvwrapper-win
linux安裝
# 方法2:linux
pip3 install virtualenvwrapper # python版本管理工具(虛擬環境管理)
mkdir $HOME/.virtualenvs # 把所有虛擬環境指定到一個目錄文件夾下存放
find / -name virtualenvwrapper.sh # 查找執行腳本路徑,添加到 ~/.bashrc
vim ~/.bashrc # 修改bash配置文件
'''
export WORKON_HOME=$HOME/.virtualenvs # python虛擬環境安裝位置
VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3 # python真實環境
source /usr/local/bin/virtualenvwrapper.sh
'''
source ~/.bashrc # 執行virtualenvwrapper安裝腳本
virtualenvwrapper使用命令
mkvirtualenv test1 # 創建虛擬環境
mkvirtualenv test2env -p python3
lsvirtualenv # 查看虛擬環境
workon test1 # 進入虛擬環境
deactivate # 退出虛擬環境
rmvirtualenv test1 # 刪除虛擬環境
pip list # 查看虛擬環境下的安裝包
-
pip命令基本使用
pip pip install # 安裝依賴包 pip uninstall # 卸載依賴包 pip list # 查看已經安裝的依賴包 pip freeze > requirements.txt # 導出依賴包 pip install -r requirements.txt # 從文件安裝依賴包
5,創建項目(掌握)
- 目的:能夠通過django的命令創建工程
- 過程:
- 1.進入到虛擬環境
- 2.創建項目:
django-admin startproject (項目名字)
- 3.進入到manage.py 所在的文件夾
- 4.啟動項目:
python manage.py runserver
- 注意點:
- 如果不指定,django默認端口8000
- 也可以指定:
python manage.py runserver ip:port
6,創建子應用(掌握)
-
目的:能夠使用django中的命令來創建子應用
-
過程:
- 1.進入到manage.py所在的同級文件夾
- 2.創建子應用:
python manage.py startapp (子應用名稱)
-
三步完成子應用創建:
-
1.注冊子應用,
- 在settings.py文件, INSTALLED_APP列表中增加"app名字.apps.app的管理類"
-
2.創建app下的urls文件
- 寫子應用的路由文件, 在子應用目錄下, 創建 urls文件, 內容拷貝 主路由的內容
-
3.引入子路由
- 把子路由引入到主路由中, 主路由中添加
url(r'^子路由前綴', include('子應用的模塊名.urls'))
-
7,第一個helloworld程序(掌握)
-
目的:能夠在子應用中編寫視圖函數helloworld
-
過程:
-
1.在views文件中編寫視圖函數
def hello(request): return http.HttpResponse('hello world')
-
2.創建urls.py文件中編寫子應用路由
from django.conf.urls import url from demoapp import views urlpatterns = [ url(r'^helloworld/$', views.hello), ]
-
3.將子應用的的路由,注冊到根應用的urls中
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ ... url(r'^demoapp/', include('demoapp.urls')) ]
-
-
注意點:
- 只要提供了子應用路徑,django不再提供默認的根路徑
8,項目的配置(settings.py文件)(理解)
-
目的:知道常見的配置作用即可
-
常見的配置有:
- BASE_DIR:項目在操作系統中的絕對路徑
- DEBUG:調試模式,默認是True
- LANGUAGE_CODE: zh-hans中文
- TIME_ZONE: Asia/Shanghai 中國時間
LANGUAGE_CODE = 'en-us' # zh-hans USE_I18N = True # 國際化, 多語言 TIME_ZONE = 'UTC' # Asia/Shanghai USE_L10N = True # 時間相關, 時間顯示格式, 中文時間格式 xxxx年xx月xx日 21:21:21 USE_TZ = True # 時間相關, 使用時區時間, 如果發現時間差8個小時,就查看這個配置
-
注意點:
- setting.py表示項目運行的配置項(調試模式,mysql,redis 。。。)
9,靜態資源問題(理解)
- 目的:在django中如何配置靜態文件的訪問地址和文件夾
- 配置:
- STATIC_URL:靜態資源的訪問路徑,默認是/static/
- STATICFILES_DIRS:靜態資源的文件夾,并且是一個列表。
- 注意點:
- STATICFILES_DIRS:是一個列表,尋找文件的時候,從前向后依次尋找,找不到報404錯誤
10,地址匹配
- 目的:在瀏覽器訪問服務器的時候,根應用的地址,子應用的地址是如何進行匹配的
- 格式1:基本匹配, 從上到下
- 格式2:匹配混亂問題, 有路由覆蓋的問題, 建議用path方法
- 格式3:
- 子應用地址后面的 / 問題, 建議大家寫的時候都加上
- url(r’^index/$’, index)
- 在訪問的時候,瀏覽器自動會定向到帶有/的地址上面去,這樣在訪問的時候不管是否攜帶/,都能訪問。
- 子應用地址后面的 / 問題, 建議大家寫的時候都加上
11,路由參數名設置(掌握)
-
目的:能夠在地址中編寫正則匹配
-
過程:
- 1.格式1:不指定正則匹配的名字:
/hello/([a-z]+)/(\d+)
- /hello/xxxx/45345/
- 按照順序依次匹配,傳遞參數
- 2.格式2:指定正則的名字:
/hello/(?P<name>[a-z]+)/(?P<name>\d+)
- 按照名字來匹配,傳遞參數
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-aOYEiANn-1605869652847)(assets/image-20200808141259797.png)]
- 1.格式1:不指定正則匹配的名字:
13,get請求
- 目的:通過request對象,獲取查詢參數
- 過程:
- http://xxx.com/index/?name=xxx&age=ccc&name=yyy
- request.GET:是一個查詢字典
- request.GET.get(key) # 獲取單個key,value
- request.GET.getlist(key) # 獲取單個key,對應的多個value,得到的是list列表。
14,post,put,delete
-
目的:獲取request獲取表單,及非表單提交的非查詢參數數據
-
常見的請求方式有:POST,PUT,DELETE,PATCH
-
請求體中的數據, 一類是json, 一類是表單數據
-
request.POST:獲取表單數據(會把body的內容,解析一份, 解析成一個查詢字典)
-
request.body:獲取json數據
- 需要將bytes類型轉成dict格式,用到decode(),loads()
# 1.拿到bodyjson數據 body_json = request.body.decode() # 2. 解析json數據 body_dict = json.loads(body_data)
-
-
Post, put都需要處理請求體, delete可以沒有請求體
-
post, 通過請求頭中的content-type字段來區分格式
- 表單格式: name=zhangsan&age=18
- json格式: ‘{“name”:“zhangsan”, “age”:18}’
POST http://localhost:8000/app1/post/ Content-Type: application/x-www-form-urlencoded name=lisi&age=18 ### POST http://localhost:8000/app1/post/ Content-Type: application/json {"name":"lisi","age": 18} ###
注意:
- json格式需要 decode()
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-eoblo4qV-1605869652853)(assets/image-20200808145640191.png)]
ost:8000/app1/post/
Content-Type: application/x-www-form-urlencoded
name=lisi&age=18
POST http://localhost:8000/app1/post/
Content-Type: application/json
{“name”:“lisi”,“age”: 18}
**
## 15、次握手和四次揮手的理解?
**
1、三次握手
三次握手過程
建立TCP連接時,需要客戶端和服務器共發送3個包。
第一次:客戶端發送初始序號x和syn=1請求標志
第二次:服務器發送請求標志syn,發送確認標志ACK,發送自己的序號seq=y,發送客戶端的確認序號ack=x+1
第三次:客戶端發送ACK確認號,發送自己的序號seq=x+1,發送對方的確認號ack=y+1
在這里插入圖片描述

三次握手過程分析
第一次:客戶端發送請求到服務器,服務器知道客戶端發送,自己接收正常。SYN=1,seq=x
第二次:服務器發給客戶端,客戶端知道自己發送、接收正常,服務器接收、發送正常。ACK=1,ack=x+1,SYN=1,seq=y
第三次:客戶端發給服務器:服務器知道客戶端發送,接收正常,自己接收,發送也正常.seq=x+1,ACK=1,ack=y+1
2、四次揮手
四次揮手過程
第一次揮手:客戶端發出釋放FIN=1,自己***seq=u,進入FIN-WAIT-1狀態
第二次揮手:服務器收到客戶端的后,發出ACK=1確認標志和客戶端的確認號ack=u+1,自己的***seq=v,進入CLOSE-WAIT狀態
第三次揮手:客戶端收到服務器確認結果后,進入FIN-WAIT-2狀態。此時服務器發送釋放FIN=1信號,確認標志ACK=1,確認序號ack=u+1,自己序號seq=w,服務器進入LAST-ACK(最后確認態)
第四次揮手:客戶端收到回復后,發送確認ACK=1,ack=w+1,自己的seq=u+1,客戶端進入TIME-WAIT(時間等待)。客戶端經過2個最長報文段壽命后,客戶端CLOSE;服務器收到確認后,立刻進入CLOSE狀態。
在這里插入圖片描述

四次揮手過程分析
第一次:客戶端請求斷開FIN,seq=u
第二次:服務器確認客戶端的斷開請求ACK,ack=u+1,seq=v
第三次:服務器請求斷開FIN,seq=w,ACK,ack=u+1
第四次:客戶端確認服務器的斷開ACK,ack=w+1,seq=u+1
為什么三次握手、四次揮手?
三次握手時,服務器同時把ACK和SYN放在一起發送到了客戶端那里
四次揮手時,當收到對方的 FIN 報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方是否現在關閉發送數據通道,需要上層應用來決定,因此,己方 ACK 和 FIN 一般都會分開發送。
3、http常見的請求方式以及它們都是做什么用的?
序號 方法 描述
1 GET 請求指定的頁面信息,并返回實體主體
2 POST 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。
3 PUT 從客戶端向服務器傳送的數據取代指定的文檔內容
4 delete 請求服務器刪除指定的頁面
5 OPTIONS 允許客戶端查看服務器的性能
4、http請求狀態碼
200 OK 當您的操作將在響應正文中返回數據時,出現此結果。
204 No Content 當您的操作成功,但不在響應正文中返回數據時,出現此結果。
304 Not Modified(重定向) 當測試實體自上次檢索以來是否被修改時,出現此結果。
403 Forbidden 客戶端錯誤
401 Unauthorized 客戶端錯誤
413 Payload Too Large(客戶端錯誤) 當請求長度過長時,出現此結果。
400 BadRequest(客戶端錯誤) 當參數無效時,出現此結果。
404 Not Found(客戶端錯誤) 當資源不存在時,出現此結果。
405 Method Not Allowed(客戶端錯誤)由于方法和資源組合不正確而出現此錯誤。 例如,您不能對一個實體集合使用 DELETE 或 PATCH。
412 Precondition Failed 客戶端錯誤
501 Not Implemented(服務器錯誤) 當未實施某個請求的操作時,出現此結果。
503 Service Unavailable(服務器錯誤) 當 Web API 服務不可用時,出現此結果。
5、什么時候選擇django來作為自己的開發框架?
大型項目、業務邏輯復雜。Django 框架可以為復雜的 Web 應用程序提供快速的開發速度。由于它提供了完整的功能,因此它提供了所有必要的實施工具。
6、pip基本命令使用
pip install #安裝依賴包
pip uninstall #卸載依賴包
pip list #查看已安裝的依賴包
pip freeze > requirements.txt #導出依賴包
pip install -r requirements.txt #從文件安裝依賴包
智能推薦
Django:基礎
認識Django 1、Django是基于Python語言開發的一套重量級框架 2、Django是一款基于BSD協議并完全免費開源的開發框架 安裝Django Django框架是以類似于python第三方包存在的,因此可以使用PIP安裝 注: 1、在安裝時也可以不指名安裝的版本,就會默認安裝最新版本 2、Django推薦使用Python 3進行開發。最后一個支持Python2.7的版本...
Django基礎
Django基礎知識 Django的模式簡稱MVT(model view template)模式,本質上和MVC(model view control)沒什么區別。 安裝虛擬環境(命令提示符) pip install virtualenv 安裝Django pip install django==1.11 創建一個Django項目 django-admin startproject hellowo...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
猜你喜歡
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...