第16章 Django框架介紹_0725_第1頁(yè)
第16章 Django框架介紹_0725_第2頁(yè)
第16章 Django框架介紹_0725_第3頁(yè)
第16章 Django框架介紹_0725_第4頁(yè)
第16章 Django框架介紹_0725_第5頁(yè)
已閱讀5頁(yè),還剩86頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 第16章 Django框架介紹 前端基礎(chǔ)知識(shí) WSGI 初識(shí)Django 第一個(gè)Django項(xiàng)目 掌握了解掌握熟悉 學(xué)習(xí)目標(biāo)掌握 Django框架的結(jié)構(gòu)12掌握 Django框架開發(fā)應(yīng)用的流程熟悉 HTTP協(xié)議34了解 HTML,CSS,JavaScript,WSGI 目錄頁(yè)01 前端基礎(chǔ)知識(shí)02 WSGI03 初識(shí)Django04 第一個(gè)Django項(xiàng)目用戶登錄 過(guò)渡頁(yè)01 前端基礎(chǔ)知識(shí)02 WSGI03 初識(shí)Django04 第一個(gè)Django項(xiàng)目用戶登錄 HTTP協(xié)議思考:什么是框架? HTTP協(xié)議在軟件工程中,框架通常被認(rèn)為是已經(jīng)實(shí)現(xiàn)某應(yīng)用領(lǐng)域通用功能的底層服務(wù),在此基礎(chǔ)之上,開發(fā)人

2、員可以按照某種規(guī)則對(duì)軟件進(jìn)行擴(kuò)充,以達(dá)到縮短開發(fā)周期、提高開發(fā)質(zhì)量的目的。 HTTP協(xié)議Django就是Python Web開發(fā)領(lǐng)域中常用的一個(gè)免費(fèi)開源框架,使用這個(gè)框架可以快速開發(fā)Python Web應(yīng)用。 HTTP協(xié)議HTTP協(xié)議是一個(gè)應(yīng)用層協(xié)議,它不傳輸數(shù)據(jù),主要用于規(guī)定Web客戶端和服務(wù)端交互過(guò)程中數(shù)據(jù)的格式。 HTTP協(xié)議可以應(yīng)用于TCP/IP協(xié)議族的傳輸層之上(即應(yīng)用層),亦可用于其他能保證可靠傳輸?shù)木W(wǎng)絡(luò)中。 HTTP協(xié)議在HTTP通信中,客戶端通過(guò)URL向服務(wù)端發(fā)送請(qǐng)求數(shù)據(jù),服務(wù)端接收請(qǐng)求、處理請(qǐng)求,并向客戶端返回響應(yīng)數(shù)據(jù)。 HTTP協(xié)議URL是統(tǒng)一資源定位符(Uniform R

3、esource Locator),它是服務(wù)器地址的標(biāo)識(shí),主要由協(xié)議頭、服務(wù)器地址、資源路徑構(gòu)成。https:/ HTTP協(xié)議協(xié)議頭中的http、https指HTTP、HTTPS協(xié)議,這兩種協(xié)議都是文本傳輸協(xié)議,不同之處在于HTTPS在HTTP的基礎(chǔ)上加入了SSL(安全套接層)協(xié)議,以保證數(shù)據(jù)傳輸?shù)陌踩浴?HTTP協(xié)議HTTP客戶端發(fā)送的請(qǐng)求消息包括請(qǐng)求行、請(qǐng)求頭、空行、請(qǐng)求數(shù)據(jù)組成。 HTTP協(xié)議當(dāng)服務(wù)器收到HTTP客戶端的請(qǐng)求數(shù)據(jù)后,會(huì)發(fā)送給HTTP客戶端一個(gè)響應(yīng)信息,這個(gè)響應(yīng)信息包括狀態(tài)行、消息報(bào)頭、空行、響應(yīng)正文組成。 HTTP協(xié)議HTTP/1.1請(qǐng)求方法與說(shuō)明如下表所示。 HTTP協(xié)

4、議HTTP請(qǐng)求方法的名稱區(qū)分大小寫。以上方法中,除GET和POST方法外,其它方法都是可選方法。 HTTP協(xié)議當(dāng)服務(wù)器向客戶端返回響應(yīng)信息時(shí),會(huì)通過(guò)狀態(tài)碼告知客戶端資源是否請(qǐng)求成功。 HTTP協(xié)議狀態(tài)碼是由3個(gè)數(shù)字組成,不同的狀態(tài)碼代表不同的含義。 HTTP協(xié)議常見(jiàn)的狀態(tài)碼有“200”和“404”,分別表示請(qǐng)求處理成功和未找到所請(qǐng)求的資源。 HTML簡(jiǎn)介HTML(Hyper Text Markup Language)又稱超文本標(biāo)記語(yǔ)言,它使用標(biāo)記標(biāo)簽來(lái)描述網(wǎng)頁(yè)。通常情況下標(biāo)記標(biāo)簽是成對(duì)出現(xiàn)的,例如和,其中第1個(gè)標(biāo)簽是開始標(biāo)簽,第2個(gè)標(biāo)簽是結(jié)束標(biāo)簽。 HTML簡(jiǎn)介示例: HTML演示 Pytho

5、n: 官網(wǎng)鏈接: HTML簡(jiǎn)介上述代碼中使用了多個(gè)HTML標(biāo)簽,這些標(biāo)簽的含義分別如下: HTML簡(jiǎn)介若沒(méi)有安裝前端開發(fā)工具,可以將上述代碼拷貝到記事本中,通過(guò)以下兩步創(chuàng)建一個(gè)可瀏覽的網(wǎng)頁(yè):第第1 1步步創(chuàng)建“static”文件夾,然后在該文件夾中創(chuàng)建 “html_demo.html”的文件。第第2 2步步將HTML示例代碼拷貝到html_demo.html文件中,將 “python.jpg”圖片放到static文件夾中。 HTML簡(jiǎn)介使用瀏覽器打開文件html_demo.html,解析后的網(wǎng)頁(yè)如下圖所示。 CSS簡(jiǎn)介CSS(層疊樣式表)是表現(xiàn)HTM

6、L文件樣式的計(jì)算機(jī)語(yǔ)言,用于修改對(duì)靜態(tài)網(wǎng)頁(yè)的樣式。.CSS演示 . h3 background-color: #00ff00 .將將h3h3標(biāo)簽中的文字標(biāo)簽中的文字背景設(shè)置為了綠色。背景設(shè)置為了綠色。 CSS簡(jiǎn)介將文件另保存為“css_demo.html”,使用瀏覽器打開,此時(shí)的網(wǎng)頁(yè)如下圖所示。 JavaScript簡(jiǎn)介JavaScript通常縮寫為JS,它是一種直譯式腳本語(yǔ)言,可以給HTML網(wǎng)頁(yè)增加動(dòng)態(tài)功能。 function changeColor() var color=yellow|green|blue|gray|red|purple;color=color.split(|); var

7、 ele = document.getElementsByTagName(h3);for(var i=0;iele.length;i+)elei.style.color=colorparseInt(Math.random() * color.length); setInterval(changeColor(),300); 將將h3h3標(biāo)簽中的文標(biāo)簽中的文字字能夠一直變換顏色能夠一直變換顏色。 JavaScript簡(jiǎn)介將代碼粘貼到“js_demo.html”文件中,右擊該文件使用瀏覽器打開后的網(wǎng)頁(yè)如下圖所示。 過(guò)渡頁(yè)01 前端基礎(chǔ)知識(shí)02 WSGI03 初識(shí)Django04 第一個(gè)Django項(xiàng)

8、目用戶登錄 WSGI規(guī)范WSGI是一種規(guī)范,它規(guī)定了Web應(yīng)用接口的格式,只要開發(fā)人員在Web應(yīng)用中實(shí)現(xiàn)一個(gè)符合WSGI規(guī)范的函數(shù),這個(gè)應(yīng)用就可以在WSGI服務(wù)器中使用。 WSGI規(guī)范WSGI規(guī)定的Web應(yīng)用接口的格式如下:def application(env, start_response): status = 200 OK headers = (content-Type, text/plain), start_response(status, headers) return hello itheima一個(gè)包含一個(gè)包含HTTPHTTP請(qǐng)求信息的字典對(duì)象請(qǐng)求信息的字典對(duì)象一一個(gè)從個(gè)從WebW

9、eb應(yīng)用中獲取響應(yīng)用中獲取響應(yīng)應(yīng)消消息頭域信息的函息頭域信息的函數(shù)數(shù) WSGI規(guī)范application()函數(shù)的返回值是一行HTML文本信息,這條信息將被作為HTTP響應(yīng)的響應(yīng)體發(fā)送給瀏覽器。 WSGI服務(wù)器由于WSGI服務(wù)器中所有的Web應(yīng)用都符合WSGI規(guī)范,所以服務(wù)器只需根據(jù)獲取的URL中提供的資源信息,便可調(diào)用不同Web應(yīng)用中的接口。 WSGI服務(wù)器下面通過(guò)案例來(lái)展示動(dòng)態(tài)Web服務(wù)器的搭建方法。dynamics_web_server_file.py服務(wù)器文件服務(wù)器文件應(yīng)用用于獲取系統(tǒng)當(dāng)前時(shí)間c_time.py應(yīng)用用于輸出一段信息say_hello.py WSGI服務(wù)器創(chuàng)建Web動(dòng)態(tài)服

10、務(wù)器文件:class HTTPServer(object): def _init_(self): . def bind(self, port): self.server_socket.bind(, port) def start(self): . def handle_client(self, client_socket): . def start_response(self, status, headers): .def main(): http_server = HTTPServer() http_server.bind(PORT) http_server.start()if _name_

11、 = _main_: main() WSGI服務(wù)器創(chuàng)建Web應(yīng)用文件c_time.pyimport timedef application(env, start_response):status = 200 OKheaders = (Content-Type, text/plain)start_response(status, headers)return time.ctime() WSGI服務(wù)器創(chuàng)建Web應(yīng)用文件say_hello.pydef application(env, start_response):status = 200 OKheaders = (Content-Type,tex

12、t/plain)start_response(status,headers)return hello itheima WSGI服務(wù)器將應(yīng)用與服務(wù)器文件置于同一目錄下,啟動(dòng)服務(wù)器,在地址欄中輸入“:8000/c_time.py”,服務(wù)器中打印的信息如下: WSGI服務(wù)器瀏覽器中展示的網(wǎng)頁(yè)如下圖所示。 WSGI服務(wù)器在地址欄中輸入“:8000/say_hello.py”,瀏覽器中展示的網(wǎng)頁(yè)如下圖所示。 過(guò)渡頁(yè)01 前端基礎(chǔ)知識(shí)02 WSGI03 初識(shí)Django04 第一個(gè)Django項(xiàng)目用戶登錄 初識(shí)DjangoDjango是一個(gè)用Python語(yǔ)言編寫的開源W

13、eb框架,它可以輕松地完成一個(gè)功能齊全的Web應(yīng)用。 Django框架具有強(qiáng)大的數(shù)據(jù)庫(kù)訪問(wèn)組件Django的Model層自帶數(shù)據(jù)庫(kù)ORM組件,無(wú)需學(xué)習(xí)SQL語(yǔ)言即可操作數(shù)據(jù)庫(kù) 初識(shí)DjangoDjango遵循MTV設(shè)計(jì)模式,該模式中各部分的職責(zé)如下:模型(模型(ModelModel)用來(lái)構(gòu)建和操作Web應(yīng)用中的數(shù)據(jù)。視圖(視圖(ViewView)負(fù)責(zé)接收用戶請(qǐng)求,進(jìn)行業(yè)務(wù)處理,并返回響應(yīng)。模板(模板(TemplateTemplate)負(fù)責(zé)封裝響應(yīng)結(jié)果,生成并返回要顯示的頁(yè)面。 初識(shí)DjangoMVT設(shè)計(jì)模式的工作流程如下圖所示。 過(guò)渡頁(yè)01 前端基礎(chǔ)知識(shí)02 WSGI03 初識(shí)Django04

14、 第一個(gè)Django項(xiàng)目用戶登錄 項(xiàng)目準(zhǔn)備使用PyCharm新建一個(gè)名為django_demo的項(xiàng)目文件,用于保存Django項(xiàng)目。1. 創(chuàng)建項(xiàng)目文件 項(xiàng)目準(zhǔn)備這里使用pip命令在PyCharm的Terminal終端安裝2.2版本Django,具體命令如下:2. 安裝Django框架pip install django=2.2 項(xiàng)目準(zhǔn)備在Terminal中使用命令創(chuàng)建一個(gè)名為“l(fā)ogin_reg”的項(xiàng)目,具體命令如下:3. 創(chuàng)建Django項(xiàng)目django-admin startproject login_reg 項(xiàng)目準(zhǔn)備執(zhí)行完以上命令后,可以在PyCharm中查看login_reg項(xiàng)目的目錄

15、結(jié)構(gòu)。3. 創(chuàng)建Django項(xiàng)目 項(xiàng)目準(zhǔn)備login_reg項(xiàng)目下各文件的作用如下: 項(xiàng)目準(zhǔn)備Django框架通過(guò)應(yīng)用來(lái)管理整個(gè)網(wǎng)站項(xiàng)目。在 Terminal工具中輸入如下命令創(chuàng)建login應(yīng)用:4. 創(chuàng)建應(yīng)用 python manage.py startapp login 項(xiàng)目準(zhǔn)備執(zhí)行以上命令后,可以在項(xiàng)目目錄下看到新增的login目錄。4. 創(chuàng)建應(yīng)用 項(xiàng)目準(zhǔn)備login目錄下各文件及目錄的作用如下: 項(xiàng)目準(zhǔn)備5. 配置Django應(yīng)用打開login_reg/setting.py文件,在該文件的選項(xiàng)INSTALLED_APPS中安裝login應(yīng)用。INSTALLED_APPS = djang

16、o.contrib.admin, django.contrib.auth, .省略N行. login, 項(xiàng)目準(zhǔn)備6. 配置數(shù)據(jù)庫(kù)信息本項(xiàng)目的數(shù)據(jù)存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)中,因此Django需要與數(shù)據(jù)庫(kù)進(jìn)行連接,并在連接之前確保數(shù)據(jù)庫(kù)已經(jīng)存在。 項(xiàng)目準(zhǔn)備6. 配置數(shù)據(jù)庫(kù)信息在MySQL Shell中執(zhí)行以下SQL語(yǔ)句以創(chuàng)建數(shù)據(jù)庫(kù):create database register_info charset=utf8; 項(xiàng)目準(zhǔn)備6. 配置數(shù)據(jù)庫(kù)信息打開login_reg/setting.py文件,設(shè)置DATABASES選項(xiàng)以配置數(shù)據(jù)庫(kù):DATABASES = default: ENGINE: djan

17、go.db.backends.mysql, NAME: register_info, USER: root, PASSWORD: 123456, Host: localhost, PORT: 3306, 項(xiàng)目準(zhǔn)備6. 配置數(shù)據(jù)庫(kù)信息由于連接MySQL的MySQLdb目前還不支持Python3,所以需要使用pymysql替代,在login_reg/_init_.py文件中進(jìn)行如下設(shè)置:import pymysqlpymysql.install_as_MySQLdb() 項(xiàng)目準(zhǔn)備Django中的一個(gè)模型類對(duì)應(yīng)著數(shù)據(jù)庫(kù)中的一張數(shù)據(jù)表,對(duì)模型類的操作就是對(duì)數(shù)據(jù)庫(kù)表的操作。在用戶登錄注冊(cè)示例中,僅需要一

18、張用來(lái)保存用戶注冊(cè)數(shù)據(jù)的表,因此在Django中只需要定義一個(gè)用戶注冊(cè)類即可。 項(xiàng)目準(zhǔn)備7. 定義模型打開login/models.py文件,在該文件編寫如下代碼:from django.db import modelsclass RegisterUser(models.Model): reg_mail = models.CharField(max_length=100, blank=False) reg_pwd = models.CharField(max_length=100, blank=False) 項(xiàng)目準(zhǔn)備7. 定義模型Django中常用的字段類型: 項(xiàng)目準(zhǔn)備8. 生成遷移文件模型類

19、定義完成之后,需要對(duì)模型類進(jìn)行遷移,遷移的目的是通過(guò)Django的ORM系統(tǒng)將定義在模型類中的字段轉(zhuǎn)換成對(duì)應(yīng)的SQL語(yǔ)句。使用如下命令進(jìn)行遷移:python manage.py makemigrations 項(xiàng)目準(zhǔn)備8. 生成遷移文件遷移命令若成功執(zhí)行,結(jié)果如下圖所示。 項(xiàng)目準(zhǔn)備8. 生成遷移文件再次查看migrations目錄,會(huì)發(fā)現(xiàn)該目錄下增加了名為0001_initial.py的文件,該文件就是當(dāng)前應(yīng)用的遷移文件。使用如下命令,可以查看該文件對(duì)應(yīng)的SQL語(yǔ)句:python manage.py sqlmigrate login 0001 項(xiàng)目準(zhǔn)備8. 生成遷移文件以上命令的執(zhí)行效果如下圖所

20、示。 項(xiàng)目準(zhǔn)備9. 執(zhí)行遷移文件遷移文件生成后,數(shù)據(jù)庫(kù)中還沒(méi)有對(duì)應(yīng)的字段生成,只有當(dāng)執(zhí)行遷移文件后,數(shù)據(jù)庫(kù)才會(huì)生成相應(yīng)數(shù)據(jù)庫(kù)表與字段。使用如下命令執(zhí)行遷移文件:python manage.py migrate 項(xiàng)目準(zhǔn)備9. 執(zhí)行遷移文件以上命令的執(zhí)行效果如右圖所示。 項(xiàng)目準(zhǔn)備9. 執(zhí)行遷移文件執(zhí)行遷移之后,查看數(shù)據(jù)庫(kù)會(huì)發(fā)現(xiàn)對(duì)應(yīng)的數(shù)據(jù)庫(kù)表已經(jīng)創(chuàng)建成功。數(shù)據(jù)中的表名與已定義的模型類類名并不完全一致,數(shù)據(jù)庫(kù)中的表名格式為:應(yīng)用名_模型類小寫類名。 項(xiàng)目準(zhǔn)備10. 啟動(dòng)開發(fā)服務(wù)器當(dāng)項(xiàng)目應(yīng)用、數(shù)據(jù)庫(kù)信息配置完成之后,通過(guò)Django開發(fā)服務(wù)器檢測(cè)是否成功,啟動(dòng)開發(fā)服務(wù)器命令如下:python manag

21、e.py runserver 項(xiàng)目準(zhǔn)備10. 啟動(dòng)開發(fā)服務(wù)器Django啟動(dòng)成功后,會(huì)在控制臺(tái)輸出如下圖所示的信息。 項(xiàng)目準(zhǔn)備10. 啟動(dòng)開發(fā)服務(wù)器上圖信息中包含一個(gè)URL地址:8000/,單擊該URL地址,若瀏覽器能夠正常訪問(wèn)Django服務(wù)器,出現(xiàn)如右圖所示的界面,說(shuō)明Django服務(wù)器啟動(dòng)成功。 編寫視圖函數(shù)Django項(xiàng)目的業(yè)務(wù)邏輯主要通過(guò)views.py中的視圖函數(shù)實(shí)現(xiàn)。定義視圖函數(shù)時(shí)第一個(gè)參數(shù)必須是一個(gè)HttpRequest對(duì)象。服務(wù)器接收到HTTP請(qǐng)求后,會(huì)根據(jù)請(qǐng)求報(bào)文創(chuàng)建一個(gè)HttpRequest對(duì)象,該對(duì)象中包含了所有的請(qǐng)求信息;視圖函數(shù)的返回值

22、是一個(gè)HttpResponse對(duì)象,該對(duì)象中包含了返回請(qǐng)求者的響應(yīng)信息。 編寫視圖函數(shù)HttpRequest對(duì)象中的常用屬性如下表所示。 編寫視圖函數(shù)在用戶登錄注冊(cè)示例中,需要定義視圖函數(shù)index()、login()與register()。index()index()為用戶顯示登錄成功后的頁(yè)面login()login()提供用戶登錄和檢測(cè)用戶填入的賬號(hào)信息合法性register()register()用戶注冊(cè)以及檢測(cè)用戶填入的注冊(cè)信息合法性 編寫視圖函數(shù)在views.py文件中定義index()函數(shù)。from .models import RegisterUserfrom django.sh

23、ortcuts import render,redirectdef index(request): login_msg = 恭喜!登錄成功 return render(request, index.html,login_msg:login_msg) 編寫視圖函數(shù)在views.py文件中定義login()函數(shù)def login(request): if request.method = GET: return render(request, login.html) if request.method = POST: userEmail = request.POST.get(username) u

24、serPassword = request.POST.get(password) 編寫視圖函數(shù)在views.py文件中定義register函數(shù)。def register(request): if request.method = POST: userEmail = request.POST.get(userEmail) userPassword = request.POST.get(userPassword) userRePzassword = request.POST.get(userRePassword) else: return render(request, register.html

25、) 設(shè)計(jì)模板文件Django框架使用模板系統(tǒng)負(fù)責(zé)前端網(wǎng)頁(yè)的設(shè)計(jì),通常情況下在項(xiàng)目目錄下創(chuàng)建子目錄templates,并將靜態(tài)文件放置到此目錄中。 設(shè)計(jì)模板文件在用戶登錄注冊(cè)示例中,首先需要在login_reg目錄下創(chuàng)建templates與static文件夾,然后將準(zhǔn)備好的login.html、register.html與index.html文件放置到template目錄下,將register.css文件放置到static目錄下。 設(shè)計(jì)模板文件在settings.py文件中找到設(shè)置項(xiàng)“TEMPLATES”,在DIRS中添加創(chuàng)建的“templates”路徑,以便views視圖中的函數(shù)關(guān)聯(lián)靜態(tài)文件。

26、TEMPLATES = BACKEND: django.template.backends.django.DjangoTemplates, DIRS: os.path.join(BASE_DIR,templates), APP_DIRS: True, .省略N行. , 設(shè)計(jì)模板文件在模板配置中的參數(shù)如下表所示。 設(shè)計(jì)模板文件為保證register.html文件能夠正確引入register.css文件,需要在settings.py中設(shè)置static文件夾路徑。STATIC_URL = /static/STATICFILES_DIRS = os.path.join(BASE_DIR, static) 設(shè)計(jì)模板文件在模板文件中使用“字典鍵名”方式表示變量,例如在login()函數(shù)中將error_msg的值傳遞到模板文件中,在login.html使用“ error_msg ”顯示。 多學(xué)一招Djang

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論