內容:
1.web預備知識
2.django介紹
3.web框架的本質及分類
4.django安裝與基本設置
?
?
?
1.web預備知識
HTTP協議:https://www.cnblogs.com/wyb666/p/9383077.html
關于web的本質:http://www.cnblogs.com/wyb666/p/9034042.html
如何自定義web框架:http://www.cnblogs.com/wyb666/p/9038644.html
了解cookie和session:https://www.cnblogs.com/wyb666/p/9068853.html
?
?
2.django介紹
(1)django介紹
Python的WEB框架有Django、Tornado、Flask 等多種,Django相較與其他WEB框架其優勢為:大而全,框架本身集成了ORM、模型綁定、模板引擎、緩存、Session等諸多功能。在Python各種web框架中,Django的文檔最完善、市場占有率最高、招聘職位最多!
?
(2)MVC和MTV
MVC是眾所周知的模式,即:將應用程序分解成三個組成部分:model(模型),view(視圖),和 controller(控制 器)。其中:
- M——管理應用程序的狀態(通常存儲到數據庫中),并約束改變狀態的行為(或者叫做“業務規則”)
- C——接受外部用戶的操作,根據操作訪問模型獲取數據,并調用“視圖”顯示這些數據。控制器是將“模型”和“視圖”隔離,并成為二者之間的聯系紐帶
- V——負責把數據格式化后呈現給用戶
Django也是一個MVC框架。但是在Django中,控制器接受用戶輸入的部分由框架自行處理,所以 Django 里更關注的是模型(Model)、模板(Template)和視圖(Views),稱為 MTV模式:
- M 代表模型(Model),即數據存取層。 該層處理與數據相關的所有事務: 如何存取、如何驗證有效性、包含哪些行為以及數據之間的關系等
- T 代表模板(Template),即表現層。 該層處理與表現相關的決定: 如何在頁面或其他類型文檔中進行顯示
- V 代表視圖(View),即業務邏輯層。 該層包含存取模型及調取恰當模板的相關邏輯。 你可以把它看作模型與模板之間的橋梁
?
(3)django的優缺點
優點:
- 完美的文檔,Django的成功很大一部分原因要歸功于Django近乎完美的官方文檔(包括Djangobook)
- 全套的解決方案,Django象Rails一樣,提供全套的解決方案(full-stackframework + batteries included),基本要什么有什么(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,開發網站應手的工具Django基本都給你做好
- 強大的URL路由配置,Django讓你可以設計出非常優雅的URL,在Django里基本可以跟丑陋的GET參數說拜拜
- 自助管理后臺,admin interface是Django里比較吸引眼球的一項contrib,讓你幾乎不用寫一行代碼就擁有一個完整的后臺管理界面。
?
缺點(源自Django堅持自己造所有的輪子,整個系統相對封閉):
- 系統緊耦合,如果你覺得Django內置的某項功能不是很好,想用喜歡的第三方庫來代替是很難的
- Django自帶的ORM遠不如SQLAlchemy強大,除了在Django這一畝三分地,SQLAlchemy是Python事實上的ORM標準,其它框架都支持SQLAlchemy
- Template功能比較弱,不能插入Python代碼,要寫復雜一點的邏輯需要另外用Python實現Tag或Filter
- URL配置雖然強大,但全部要手寫,這一點跟Rails的Conventionover configuration的理念完全相左,高手和初識Django的人配出來的URL會有很大差異
?
Django大包大攬,用它來快速開發一些Web運用是很不錯的。如果你順著Django的設計哲學來,你會覺得Django很好用,越用越爽;相反,你如果不能融入或接受Django的設計哲學,你用Django一定會很痛苦,趁早放棄的好
?
(4)django的組件
Django框架的核心包括:一個 面向對象的映射器,用作數據模型和關聯性數據庫間的媒介(ORM);一個基于正則表達式的URL分發器;一個視圖系統,用于處理請求;以及一個模板系統
核心框架中還包括:
- 一個輕量級的、獨立的Web服務器,用于開發和測試
- 一個表單序列化及驗證系統,用于HTML表單和適于數據庫存儲的數據之間的轉換
- 一個緩存框架,并有幾種緩存方式可供選擇
- 中間件支持,允許對請求處理的各個階段進行干涉
- 內置的分發系統允許應用程序中的組件采用預定義的信號進行相互間的通信
- 一個序列化系統,能夠生成或讀取采用XML或JSON表示的Django模型實例
- 一個用于擴展模板引擎的能力的系統
另外Django 包含了很多應用在它的"contrib"包中,這些包括:
- 一個可擴展的認證系統
- 動態站點管理頁面
- 一組產生 RSS 和 Atom 的工具
- 一個靈活的評論系統
- 產生Google 站點地圖 (Google Sitemaps)的工具
- 防止跨站請求偽造(cross-site request forgery)的工具
- 一套支持輕量級標記語言(Textile和Markdown)的模板庫
- 一套協助創建地理信息系統(GIS)的基礎框架
?
?
3.web框架的本質及分類
(1)web框架的本質:socket服務端 與 瀏覽器的通信
?
(2)socket服務端功能劃分
- 負責與瀏覽器收發消息(socket通信) --> wsgiref/uWsgi/gunicorn...
- 根據用戶訪問不同的路徑執行不同的函數
- 從HTML讀取出內容,并且完成字符串的替換 --> jinja2(模板語言)
(3)Python中 Web框架的分類
按上面三個功能劃分:
- 框架自帶a,b,c --> Tornado
- 框架自帶b和c,使用第三方的a --> Django
- 框架自帶b,使用第三方的a和c --> Flask
按另一個維度來劃分:
- Django --> 大而全(你做一個網站能用到的它都有)
- 其他 --> Flask 輕量級
?
?
4.django安裝與基本設置使用
(1)django版本
現在主流的版本如下:
帶有LTS表明是長期支持的版本
?
(2)本人使用版本
本人選擇使用1.11
安裝:可直接使用如下命令安裝
1 pip3 install django==1.11.11
?
?
(3)創建django項目
- 命令行創建:django-admin startproject mysite
- pycharm創建:File --> New project --> 左側選Django --> 右側填項目路徑,并且勾選python.exe
?
(4)設置django項目(settings.py)
配置HTML文件存放的位置:
1 // settings.py中的TEMPLATES是用來配置項目模板文件(HTML)的路徑 2 TEMPLATES = [ 3 { 4 'BACKEND': 'django.template.backends.django.DjangoTemplates', 5 'DIRS': [os.path.join(BASE_DIR, 'templates')], 6 'APP_DIRS': True, 7 'OPTIONS': { 8 'context_processors': [ 9 'django.template.context_processors.debug', 10 'django.template.context_processors.request', 11 'django.contrib.auth.context_processors.auth', 12 'django.contrib.messages.context_processors.messages', 13 ], 14 }, 15 }, 16 ]
?
配置靜態文件存放的位置:
1 // 在setting.py中最下面寫上這兩條 配置靜態文件目錄 2 // 靜態文件 -> css js 圖片 3 STATIC_URL = '/static/' 4 STATICFILES_DIRS = ( 5 os.path.join(BASE_DIR, 'static'), 6 )
?
修改django默認的語言:
1 # 將默認的英文改成中文 2 LANGUAGE_CODE = 'zh-hans'
?
將csrf規則注釋:
1 注釋settings.py的middlerware中的以下內容(csrf): 2 # 'django.middleware.csrf.CsrfViewMiddleware',
?
(5)運行django項目
1 Django項目的啟動: 2 1. 命令行啟動 3 在項目的根目錄下(也就是有manage.py的那個目錄),運行: 4 python3 manage.py runserver IP:端口--> 在指定的IP和端口啟動 5 python3 manage.py runserver 端口 --> 在指定的端口啟動 6 python3 manage.py runserver --> 默認在本機的8000端口啟動 7 8 2. PyCharm啟動 9 點綠色的小三角,直接可以啟動Django項目(前提是小三角左邊是你的Django項目名)
?
(6)創建app
1 # django中的APP是什么: 2 整個project -> 一個大學(武漢大學) 3 一個APP -> 某個學院(計算機學院/金融學院/管理學院、、、) 4 5 APP可以方便我們在一個大的Django項目中,管理實現不同的業務功能 6 7 創建APP的命令 8 命令行 - 在Django項目的根目錄輸入: 9 python3 manage.py startapp app的名字
以下是創建APP的實例:
執行以上命令后文件夾如下:
最后要在settings.py中設置一下:
另外也可以在創建pycharm項目時隨手創建一個APP:
?
?
(7)數據庫配置
在Django項目中的settings.py中設置連接數據庫的相關配置(告訴Django連接哪一個數據庫):
1 # Database 2 # https://docs.djangoproject.com/en/1.11/ref/settings/#databases 3 4 # 默認使用sqlite數據庫 5 # DATABASES = { 6 # 'default': { 7 # 'ENGINE': 'django.db.backends.sqlite3', 8 # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 9 # } 10 # } 11 12 # 數據庫相關配置: 13 DATABASES = { 14 'default': { 15 'ENGINE': 'django.db.backends.mysql', # 連接的數據庫類型 16 'HOST': '127.0.0.1', # 連接數據庫的地址 17 'PORT': 3306, # 端口 18 'NAME': "django", # 數據庫名稱 19 'USER': 'root', # 用戶 20 'PASSWORD': 'root' # 密碼 21 } 22 }
如果要使用pymysql連接MySQL數據庫,就要進行如下設置:
告訴Django用pymysql代替默認的MySQLDB 連接MySQL數據庫,在項目/__init__.py文件中,寫下面兩句:
1 import pymysql 2 # 告訴Django用pymysql來代替默認的MySQLdb 3 pymysql.install_as_MySQLdb()
?