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