久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Django博客教程(五):處理 http 請求完全解讀

 石頭p4g54puvpz 2017-05-10

專 欄


追夢人物,,Python中文社區(qū)專欄作者,。電子科技大學(xué)計(jì)算機(jī)學(xué)院研究生,從事大數(shù)據(jù)分析研究方向,。主要使用 Python 語言進(jìn)行相關(guān)數(shù)據(jù)的分析,,熟練使用 django 開發(fā)網(wǎng)站系統(tǒng)。Django開源論壇作者,。

博客地址:

http://www.jianshu.com/u/f0c09f959299

您有一份PyLive主講人邀請函請查收,!

Web 應(yīng)用的交互過程其實(shí)就是 http 請求與響應(yīng)的過程。無論是在 PC 端還是移動(dòng)端,,我們通常使用瀏覽器來上網(wǎng),,我們的上網(wǎng)流程大致來說是這樣的:

  1. 我們打開瀏覽器,在地址欄輸入我們想訪問的網(wǎng)址,,比如 www.djangoproject.com(當(dāng)然你也可能從收藏夾里直接打開網(wǎng)站,,但本質(zhì)上都是一樣的,。)

  2. 瀏覽器知道我們想要訪問那個(gè)網(wǎng)址后,它在后臺(tái)幫我們做了很多事情,,主要就是把我們的訪問意圖包裝成一個(gè) http 請求,,發(fā)給我們想要訪問的網(wǎng)址所對應(yīng)的服務(wù)器。通俗點(diǎn)說就是瀏覽器幫我們通知網(wǎng)站的服務(wù)器,,說有人來訪問你啦,,訪問的請求都寫在 http 里了,你按照要求處理后告訴我,,我再幫你回應(yīng)他,!

  3. 網(wǎng)站服務(wù)器處理了 http 請求,然后生成一段 http 響應(yīng)給瀏覽器,,瀏覽器解讀這個(gè)響應(yīng),,把相關(guān)的內(nèi)容在瀏覽器里顯示出來,于是我們就看到了網(wǎng)站的內(nèi)容,。比如你訪問了社區(qū)主頁 www.pythonzh.cn,,服務(wù)器接收到這個(gè)請求后他就知道用戶訪問的是首頁,首頁顯示的是全部帖子列表,,于是它從數(shù)據(jù)庫里把帖子數(shù)據(jù)取出來,,生成一個(gè)寫著這些數(shù)據(jù)的 html 文檔,包裝到 http 響應(yīng)里發(fā)給瀏覽器,,瀏覽器解讀這個(gè)響應(yīng),,把 html 文檔顯示出來,我們就看到了帖子列表的內(nèi)容,。

因此,,django 作為一個(gè) web 框架,它的使命就是處理流程中的第二步,,接收瀏覽器發(fā)來的 http 請求,,返回相應(yīng)的 http 響應(yīng)。于是引出這么幾個(gè)問題:

  1. django 如何接收 http 請求,?

  2. django 如何處理這個(gè) http 請求,?

  3. django 如何生成 http 響應(yīng)?

對于如何處理這些問題,,django 有其自身的一套規(guī)定的機(jī)制,。我們按照 django 的規(guī)定,就能開發(fā)出我們所需的功能,。我們先以一個(gè)最簡單的 hello world 為例來看看 django 處理上述問題的機(jī)制是怎么樣的,。

首先 django 需要知道當(dāng)用戶訪問不同的網(wǎng)址時(shí),應(yīng)該如何處理不同的網(wǎng)址,。django 的做法是把不同的網(wǎng)址對應(yīng)的處理函數(shù)寫在一個(gè) urls.py 文件里,,當(dāng)用戶訪問某個(gè)網(wǎng)址時(shí),,django 就去會(huì)這個(gè)文件里找,如果找到這個(gè)網(wǎng)址,,就會(huì)調(diào)用和它綁定在一起的處理函數(shù)(叫做視圖函數(shù)),,下面是具體的做法,首先在 blog 應(yīng)用的目錄下創(chuàng)建一個(gè) urls.py 文件,,這時(shí)你的目錄看起來是這樣:

在 urls.py 中寫入這些代碼:

我們首先從 django.conf.urls 導(dǎo)入了 url 函數(shù),,又從當(dāng)前目錄下導(dǎo)入了 views 模塊。然后我們把網(wǎng)址和處理函數(shù)的關(guān)系寫在了 urlpatterns 列表里,。綁定關(guān)系的寫法是把網(wǎng)址和對應(yīng)的處理函數(shù)作為參數(shù)傳給 url 函數(shù)(第一個(gè)參數(shù)是網(wǎng)址,,第二個(gè)參數(shù)是處理函數(shù)),,另外我們還傳遞了另外一個(gè)參數(shù) name,,這個(gè)參數(shù)的值將作為處理函數(shù) index 的別名,這在以后會(huì)用到,。

注意這里我們的網(wǎng)址是用正則表達(dá)式寫的,,django 會(huì)用這個(gè)正則表達(dá)式去匹配用戶實(shí)際輸入的網(wǎng)址,如果匹配成功,,就會(huì)調(diào)用其后面的視圖函數(shù)做相應(yīng)的處理,。比如說我們本地開發(fā)服務(wù)器的域名是 127.0.0.1:8000,那么當(dāng)用戶輸入網(wǎng)址:127.0.0.1:8000 后,,django 首先會(huì)把域名(即 127.0.0.1)和端口號(hào)(8000)去掉,,此時(shí)只剩下一個(gè)空字符串,而 r'^$' 的模式正是匹配一個(gè)空字符串(這個(gè)正則表達(dá)式的意思是以空字符串開頭且以空字符串結(jié)尾),,于是二者匹配,,django 便會(huì)調(diào)用其對應(yīng)的 views.index 函數(shù)。

第二步就是要實(shí)際編寫我們的 views.index 視圖函數(shù)了,,按照慣例視圖函數(shù)定義在 views.py 文件里:

我們前面說過,,Web 服務(wù)器的作用就是接收來自用戶的 http 請求,根據(jù)請求內(nèi)容作出相應(yīng)的處理,,并把處理結(jié)果包裝成 http 響應(yīng)返回給用戶,。這個(gè)兩行的函數(shù)體現(xiàn)了這個(gè)過程。它首先接受了一個(gè)名為 request 的參數(shù),,這個(gè) request 就是 django 為我們封裝好的 http 請求,,它是類 HttpResponse 的一個(gè)實(shí)例。然后我們便直接返回了一個(gè) http 響應(yīng)給用戶,,這個(gè) http 響應(yīng)也是 django 幫我們封裝好的,,它是類 HttpResponse 的一個(gè)實(shí)例,只是我們給它傳了一個(gè)自定義的字符串,,用戶接受到這個(gè)響應(yīng)后就會(huì)在瀏覽器顯示出我們傳遞的內(nèi)容:“歡迎訪問我的博客首頁,!”

還差最后一步了,,我們前面建立了一個(gè) urls.py 文件,并且綁定了 URL 和視圖函數(shù) index,,但是 django 并不知道,。django 匹配 url 是在 blogproject 的 urls.py 下的,所以我們要把我們自己寫的 urls.py 文件包含到這個(gè)文件里去,,打開這個(gè)文件看到如下內(nèi)容:

修改成如下的形式:

這里 - 表示刪掉這一行,,+ 表示添加這一行。我們這里導(dǎo)入了一個(gè) include 函數(shù),,然后利用這個(gè)函數(shù)把 blog 應(yīng)用下的 urls.py 包含了進(jìn)來,。此外 include 前還有一個(gè) r'',這是一個(gè)空字符串,,這里也可以寫其他字符串,,django 會(huì)把這個(gè)字符串和后面 include 的 urls.py 文件中的 url 拼接。假如我們這里把 r'' 改成 r'blog/',,而我們在 blog.urls 中寫的url 是 r'^$',,一個(gè)空字符串,那么 django 最終匹配的就是 blog/ 加上一個(gè)空字符串,,即 blog/,。

運(yùn)行 python manage.py runserver 打開開發(fā)服務(wù)器,在瀏覽器輸入開發(fā)服務(wù)器的地址http://127.0.0.1:8000/,,可以看到我們返回的內(nèi)容了:歡迎訪問我的博客首頁,!

這基本上就上 django 的開發(fā)流程了,寫好處理 http 請求和返回 http 響應(yīng)的視圖函數(shù),,然后把視圖函數(shù)綁定到相應(yīng)的 URL 上,。但是等一等!我們看到在我們的視圖函數(shù)里返回的是一個(gè) HTTPResponse 類的實(shí)例,,我們給他傳入了一個(gè)我們希望顯示在用戶瀏覽器上的字符串,。但是我們的博客不可能只顯示這么一句話,它有可能會(huì)顯示很長很長的內(nèi)容,,比如我們發(fā)布的博客文章列表,,或者一大段的博客文章,我們不能每次都把這些大段大段的內(nèi)容傳給 HTTPResponse,。于是 django 對這個(gè)問題給我們提供了一個(gè)好的方法,,叫做模板系統(tǒng)。django 要我們把大段的文本寫到一個(gè)文件里,,然后 django 自己會(huì)去讀取這個(gè)文件,,django 再把讀取到的內(nèi)容傳給 HTTPResponse。我們用模板系統(tǒng)來改造一下上面的例子。首先在我們的項(xiàng)目根目錄下建立一個(gè)名為 templates 的文件夾,,用來存放我們的模板,。然后再建立一個(gè)名為 blog 的文件夾,用來存放和 blog 應(yīng)用相關(guān)的模板,。當(dāng)然模板存放在哪里是無關(guān)緊要的,,只要 django 能夠找到的就好。但是我們建立這樣的文件夾結(jié)構(gòu)的目的是把不同應(yīng)用用到的模板隔離開來,,這樣方便以后維護(hù),,養(yǎng)成良好的習(xí)慣。然后我們在 blog 目錄下建立一個(gè)名為 index.html 的文件,,寫上下面的代碼:

這是一個(gè)標(biāo)準(zhǔn)的 html 文檔了,,只是里面有兩個(gè)比較奇怪的地方:{{ title }},{{ welcome }},,這是 django 規(guī)定的語法,。用 {{ }} 包起來的叫做模板變量。django 在讀取這個(gè)模板的時(shí)候回根據(jù)我們傳來值替換這些變量,。最終在模板中顯示的將會(huì)是我們傳遞的值,。

模板寫好了,,還得告訴 django 去哪里找模板,,在 settings.py 文件里設(shè)置一下模板文件所在的路徑。在 settings.py 找到 TEMPLATES 選項(xiàng),,它的內(nèi)容是這樣的:

其中 DIRS 就是設(shè)置模板的路徑,,在 [] 中寫入 os.path.join(BASE_DIR, 'templates'),變成這樣:

這里 BASE_DIR 是 settings.py 前面定義的變量,,記錄的是工程根目錄 blogproject 的值,,在這個(gè)目錄下有我們的模板目錄 templates,于是利用os.path.join 把這兩個(gè)路徑連起來,,構(gòu)成完整的模板路徑,,django 就知道去這個(gè)路徑下面找我們的模板了。

視圖函數(shù)可以改一下了:

這里我們在是直接把字符串傳給 HttpResponse 了,,而是調(diào)用 django 提供了 render 函數(shù),,這個(gè)函數(shù)根據(jù)我們傳入的參數(shù)來構(gòu)造 HttpResponse。我們首先把 http 請求傳了進(jìn)去,,然后它根據(jù)第二個(gè)參數(shù)的值 blog/index.html 找到我們的模板,,然后讀取模板中的內(nèi)容,并且根據(jù)我們傳入的 context 把模板中的變量替換為我們傳遞的值,,{{ title }} 被替換成了 context 字典中 title 對應(yīng)的值,,同理 {{ welcome }} 也被替換成相應(yīng)的值。最終,我們的 html 模板中的內(nèi)容字符串被傳遞給 HttpResponse 對象并返回給瀏覽器,,這樣用戶的瀏覽器上便顯示出了我們寫的 html 模板的內(nèi)容,。

PyLive預(yù)告:Python數(shù)據(jù)科學(xué)與算法攻略Live掃描以上二維碼即可參加

主講人:Toby
主講時(shí)間:5月10日(周三)晚21:00-22:00
主講人簡介:國內(nèi)知名醫(yī)藥大數(shù)據(jù)平臺(tái)任職,,幾十個(gè)醫(yī)藥數(shù)據(jù)庫負(fù)責(zé)人,。專注于醫(yī)藥統(tǒng)計(jì),熟悉自然語言處理和機(jī)器學(xué)習(xí),。設(shè)計(jì)過HBV分析器,,乳腺癌分類器和中藥性味歸經(jīng)關(guān)聯(lián)分析。


課程中將為大家免費(fèi)奉送10G最新國內(nèi)外人工智能與機(jī)器學(xué)習(xí)資料,,通過以下兩種方式之一可以領(lǐng)取課程優(yōu)惠券

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多