1. 程式人生 > >Django瞭解及安裝注意點

Django瞭解及安裝注意點

Web框架之Django框架開發
一、什麼是web伺服器(瞭解)
當我們在瀏覽器輸入URL後,瀏覽器會先請求DNS伺服器,獲得請求站點的 IP 地址。然後傳送一個HTTP Request(請求)給擁有該 IP 的主機,接著就會接收到伺服器給我們的 HTTP Response(響應),瀏覽器經過渲染後,以一種較好的效果呈現給我們。
這個過程中,正是Web伺服器在幕後默默做貢獻,它永久地等待客戶端(主要是瀏覽器,比如Chrome,Firefox等)傳送請求。
當收到請求之後,它會生成相應的響應並將其返回至客戶端。
Web伺服器通過HTTP協議與客戶端通訊,因此也被稱為HTTP伺服器。

(一)Web伺服器工作原理
可分成如下4個步驟
1.建立連線:客戶機通過TCP/IP協議建立到伺服器的TCP連線
2.請求過程:客戶端向伺服器傳送HTTP協議請求包,請求伺服器裡的資源文件。
3.應答過程:伺服器向客戶機發送HTTP協議應答包,如果請求的資源包含有動態語言的內容,那麼伺服器會呼叫動態語言的解釋引擎負責處理“動態內容”,並將處理得到的資料返回給客戶端。由客戶端解釋HTML文件,在客戶端螢幕上渲染圖形結果。
4.關閉連線:客戶機與伺服器斷開。

http 超文字傳輸協議 www域名都必須遵守這個協議
https 安全 套接字協議
古代的時候:飛鴿傳書
龐廣達->寂寞難耐->想認識一個朋友,聊聊天

飛鴿傳書的地址 http:// 北京市昌平區(門牌號)/天通苑/東廂房/人物:任君爽
找任君爽 有幾種可能
(1)查無此人404
403 forbidden
(2)找到人了
人不來
人來了 互相學習XXOO 200
(3)鴿子累死了
(4)任君爽不舒服 500伺服器問題

例如:我們實現一個簡單的 Web 伺服器,監聽本地埠 8000,在瀏覽器訪問 http://localhost:8000 就能看到響應內容。而我們的程式也能夠打印出客戶端發來的請求內容

二、什麼是web框架(瞭解)
框架(framework),特指為解決一個開放性問題而設計的具有一定約束性的支撐結構,使用框架可以幫你快速開發特定的系統,簡單地說,就是你用別人搭建好的舞臺來做表演。
對於所有的Web應用,本質上其實就是一個socket服務端,使用者的瀏覽器其實就是一個socket客戶端。
早期開發站點確做了許多重複性勞動,後來為了減少重複,避免寫出龐雜,混亂的程式碼,人們將 Web 開發的關鍵性過程提取出來,開發出了各種 Web 框架。
有了框架,就可以專注於編寫清晰、易維護的程式碼,無需關心資料庫連線之類的重複性工作。

使用者輸入 URL,客戶端傳送請求,控制器(Controller)首先會拿到請求,然後用模型(Models)從資料庫取出所有需要的資料,進行必要的處理,將處理後的結果傳送給 檢視(View),檢視利用獲取到的資料,進行渲染生成 HtmlResponse返回給客戶端。
三、Python web 目前較火的三大框架(瞭解)
(一)Django
Django是一個開放原始碼的Web應用框架,由Python寫成。採用了MTV的框架模式,即模型M,模板T和檢視V。
它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的,即是CMS(內容管理系統)軟體。
(二)Flask
Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱採用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。
 Flask也被稱為 “microframework” ,因為它使用簡單的核心,用 extension 增加其他功能。Flask沒有預設使用的資料庫、窗體驗證工具。
 Flask 很輕,花很少的成本就能夠開發一個簡單的網站。非常適合初學者學習。Flask 框架學會以後,可以考慮學習外掛的使用。例如使用 WTForm + Flask-WTForm 來驗證表單資料,用 SQLAlchemy + Flask-SQLAlchemy 來對你的資料庫進行控制。
(三)Tornado
 Tornado是一種 Web 伺服器軟體的開源版本。Tornado 和現在的主流 Web 伺服器框架(包括大多數 Python 的框架)有著明顯的區別:它是非阻塞式伺服器,而且速度相當快。
 得利於其 非阻塞的方式和對epoll的運用,Tornado 每秒可以處理數以千計的連線,因此 Tornado 是實時 Web 服務
的一個 理想框架。
四、MVC/MTV介紹
(一)MVC:全名Model View Controller,是模型(model)-檢視(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。
  通俗解釋:一種檔案的組織和管理形式!不要被縮寫嚇到了,這其實就是把不同型別的檔案放到不同的目錄下的一種方法,然後取了個高大上的名字。當然,它帶來的好處有很多,比如前後端分離。       
  模型(model):定義資料庫相關的內容,一般放在models.py檔案中。
  檢視(view):定義HTML等靜態網頁檔案相關,也就是那些html、css、js等前端的東西。
控制器(controller):定義業務邏輯相關,就是你的主要程式碼。

(二)MTV: view不再是HTML相關,而是主業務邏輯了
html被放在Templates中,稱作模板,於是MVC就變成了MTV。

五、Django框架起步(重點)

(一)安裝Django環境
1.配置虛擬環境
安裝Python-3.5.3 amd64位

Win+R小黑窗鍵入cmd命令後執行以下命令: python -V

		Win+R小黑窗鍵入cmd命令後執行以下命令:

命令1:pip install virtualenv

    如果python安裝在預設的C盤目錄,有可能因為資料夾的許可權不夠導致安裝失敗,解決方案:將python資料夾給足許可權

(1)安裝virtualenv的擴充套件管理包,用於更方便的管理虛擬環境
命令2:pip install virtualenvwrapper-win

(2)設定系統環境變數,變數值是裝載虛擬環境的目錄,建議選擇除C盤外的碟符
我的電腦->右鍵->屬性->高階系統設定->高階->環境變數

(3)虛擬目錄的操作
① 建立並進入到D:\Envs

② 建立虛擬目錄
命令3:mkvirtualenv 虛擬環境名稱

③ 進入虛擬目錄
命令4:workon 虛擬目錄名稱
workon 檢視全部的虛擬目錄

④ 退出虛擬目錄
deactivate

2.安裝以及執行Django環境
命令:pip install Django==1.11.3

解除安裝:pip uninstall Django

(二)建立專案以及應用的方法
方法一:命令列方法建立
1.建立專案命令如下:
django-admin startproject 專案名稱
2.建立應用命令如下:
django-admin startapp 應用名稱
方法二:利用pycharm方式建立(推薦)

(三)專案的settings.py檔案的基本配置
1.DEBUG:一個布林值,該布林函式用以開啟專案的除錯模式。如果設定為true,Django會顯示詳細的錯誤頁面。當你移動到一個生產環境,記得必須設定它為False。不要將網站以除錯模式部署到生產中,這樣會暴露你的專案的敏感資料。
2.ALLOWED_HOSTS:在除錯模式或正在執行測試時,這個選項不起作用。一旦你關閉除錯模式,並將你的網站佈置在正式的生產環境,就必須在settings.py中新增部署環境的域名/主機,以便允許伺服器執行Django站點。
3.INSTALLED_APPS :這個設定告訴Django哪些app是啟用的。
預設情況下,Django包含下面application
(1)django.contrib.admin: Django管理站點.
(2)django.contrib.auth: Django認證模組.
(3)django.contrib.contenttypes: Django內容型別框架.
(4)django.contrib.sessions: Django會話框架.
(5)django.contrib.messages: Django訊息傳遞框架.
(6)django.contrib.staticfiles: Django管理靜態檔案的框架
4.MIDDLEWARE_CLASSES :一個元組,包含需要執行的中介軟體
5.DATABASES:是一個用於在專案中使用的,包含所有資料庫的字典。
預設的配置使用sqlite3資料庫

拓展:資料庫引擎可以是如下:
django.db.backends.sqlite3(預設)、
django.db.backends.mysql(常用)、
因為修改了配置中的資料庫引擎,執行後會報如下錯誤:

需要在虛擬環境中安裝mysqlclient才能支援mysql驅動
命令:
pip install mysqlclient

可能的出錯!

解決辦法:
執行已經下在好的mysqlclient-1.3.13-cp35-cp35m-win_amd64.whl 和Python版本一致,64位
命令:
pip install d:/mysqlclient-1.3.13-cp35-cp35m-win_amd64.whl
成功!

重新執行後仍然報錯,原因是沒有建立實際名稱的資料庫

再次執行專案,就不會報錯了

6.LANGUAGE_CODE:為Django專案定義預設的使用語言。

7.在TIME_ZONE配置中修改預設的時區配置

8.在USE_TZ配置中修改預設的時間配置

(四)安裝環境之後,執行django環境
方法一:命令執行
python manage.py runserver (切換對應的磁碟目錄)

方法二:在pycharm環境中點選執行按鈕

在位址列中敲入http:127.0.0.1:8000,能看到如下預設的執行介面

    看到了該頁面說明Django環境搭建成功了。

六、Django框架專案目錄介紹
manage.py : Django專案裡面的工具,通過它可以呼叫django shell和資料庫等。
myblog/
| —  settings.py : 包含了專案的預設設定,包括資料庫資訊,除錯標誌以及其他一些工作的變數。
| —  urls.py : 負責把URL模式對映到應用程式。
| — wsgi.py :  用於專案部署。
blog /
| — admin.py  :  django 自帶admin後臺管理,將models.py 中表對映到後臺。
| — apps.py :  應用的相關配置。
| — models.py  : Django 自帶的ORM,用於設計資料庫表。
| — tests.py  :  用於編寫Django單元測試。
| — views.py :檢視檔案,用於編寫功能的主要處理邏輯
七、Django框架第一個簡單的小專案
(一)在專案中的urls.py中新增對應的url對映路徑

(二)為了方便管理每一個應用,建議在不同應用中新增urls.py檔案

新增如下程式碼:

(三)在應用的views.py檔案中新增如下程式碼:

點選執行連結,能夠看到自定義函式中的內容

八、自定義模板和靜態檔案位置

(一)自定義模板位置
編輯專案下的settings.py檔案,修改TEMPLATES的值

將APP_DIRS設定為False,即不再允許Django按照預設方式尋找模板檔案
(二)自定義靜態檔案位置
編輯專案下的settings.py檔案,修改TEMPLATES的值

其中,第一行說明了Django中認定的靜態檔案是什麼,第二行說明怎樣查詢靜態檔案地址

(三)通用靜態檔案和基礎模板
模板標籤語法:
1.引入靜態檔案
{% static ‘檔案地址’ %}
2.載入靜態檔案
{% load static %}
3.檔案包含
{% include ‘檔案地址’%}
4.Block塊標籤
{% block 自定義名稱 %}{% endblock %}
5.註釋標籤
{# 註釋內容 #}
6.模板繼承標籤
{% extends “檔案地址” %}

九、模型ORM的建立以及資料遷移

(一)什麼是ORM模型
ORM的作用是在關係型資料庫和業務實體物件之間進行對映,這樣在操作業務物件時,就不需要再去和複雜的SQL語句打交道,只需要簡單的操作物件的屬性和方法。
ORM的表現方式就是編寫資料模型類,這些類可以寫到任何檔案中,通常寫在每個應用的models.py檔案中,每個資料模型類都是django.db.models.Model的子類
組成方式:應用的名稱(小寫字母)+資料模型類(小寫字母) 例如:blog_blogarticles
(二)簡單的資料模型類基本結構

資料模型類(model)依然是Python中的類,可以在其中命名屬性(變數)和方法。
每個屬性(變數)對應著資料庫中的一個欄位,變數也被稱為欄位,Django會為每個資料模型類設定一個自增長的id欄位並作為該表的主鍵,不需要再資料模型類中寫出來,
欄位屬性型別
1.CharField:用於儲存字串,再使用時需要指明長度
2.TextField:和CharField一樣,區別在於無上限,通常用於儲存大文字
3.DateField和DateTimeField:用於儲存時間

title = models.CharField(max_length=50)
欄位名 varchar(100)

content=models.TextField()
欄位content longtext 長文字

add_time = models.DateTimeField()
欄位add_time datetime 年月日時分秒

注意:
date – > ‘1000-01-01’ to ‘9999-12-31’.
datetime --> ‘1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’.
timestamp – > ‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC

(三)資料遷移
在虛擬環境下執行資料遷移命令
命令:python manage.py makemigrations

在對應的應用裡面的migrations資料夾中產生了一個0001_initial.py檔案
(四)執行sqlmigrate命令檢視生成的檔案本質
命令:python manage.py sqlmigrate 應用名 檔名字首
例如:python manage.py sqlmigrate myblog 0001

(五)執行migrate命令真正生成資料庫表文件
命令:python manage.py migrate

檢視navicat mysql工具中的blog資料庫,能夠看到生成的資料表

(六)專案除錯Django+Pycharm
(一)在開發Django程式的過程中,資料庫操作形成瓶頸,想要在log中檢視程式具體執行了哪些SQL語句除錯結果,這時候就可以使需要在settings.py中加上這麼幾句
LOGGING = {

'version': 1,
'disable_existing_loggers': False,
'handlers': {
    'console':{
        'level':'DEBUG',
        'class':'logging.StreamHandler',
    },
},
'loggers': {
    'django.db.backends': {
        'handlers': ['console'],
        'propagate': True,
        'level':'DEBUG',
    },
}

}

(二)方法2
在views.py
from django.db import connection
使用時 print(connection.queries)

示例:部落格的新聞資料新增
(一)建立應用路由呼叫控制器中函式

(二)在Templates目錄中建立模版檔案

(三)建立提交表單資料的路由,注意:這是是url路由的反向解析

(四)在控制器檔案中建立處理表單資料的函式

python manage.py runserver 127.0.0.1:8080 執行多個專案的時候切換埠號

(五)修改新增處理方法以及美化新增表單頁面

(六)建立一個顯示資料的方法以及對應模版介面

(七)處理顯示頁面給標題加超連結

定義xq路由

建立xq函式並接受路由中傳遞的引數

模板頁面