Django來敲門~第一部分【6.1 視圖函數】

治大國若烹小鮮。以道蒞天下
——老子《道德經》


本節內容

  • Django web項目的運行流程分析
  • 視圖處理函數的定義
  • 多視圖處理函數及接收參數

1. web項目運行流程分析

通常情況下,完整的處理流程如下:

  • 瀏覽器發起請求(瀏覽器:大爺,我需要http://localhost:8000/polls這個資源,給我吧);
  • 服務器接收到用戶請求,開始分析這個URL地址(服務器:介個家伙要什么東東啊,掐掉URL默認的頭部http://localhost:8000,剩下的就是要訪問的東東了,原來是要訪問:polls/
  • 服務器urls.py模塊處理路由(服務器:來來來,來我的mysite/urls.py中看看,有木有和你要的東東類似的,找啊找啊找啊找找到一個`r"^polls/"`,就是它了,它是誰呢原來是隔壁老王啊include("polls.url")
  • 服務器urls.py繼續查找include包含的下一級路由(服務器:隔壁老王,這個家伙要申請polls/里面的東東,你看看你家有木有這個東東,此時掐掉開頭的"polls/",開始查找""(找的是一個空白字符), polls/urls.py的內容,找啊找啊找啊找~找到一個url(r"^$"),對應的就是views.index處理函數了)
  • 服務器處理視圖的函數(服務器:老王說在我家床上有個views視圖里面有個index處理函數,就是它了,然后將床單index函數處理的結果,扔給了瀏覽器去展示了)

看到這里是不是已經暈菜了,這就對了,接下來,看一張圖,就明白了

請求的處理過程

接下來,我們的重點就是視圖處理函數

2. 視圖處理函數的定義

在我們創建好的應用polls/中,可以定義視圖函數,專門用于接收和響應URL請求操作的函數;
該函數默認第一個參數接收的就是一個請求對象HttpRequest,通常我們會將第一個參數寫成request;函數后面的其他參數就是可以從URL路徑中接收的參數數據了。

接下來,先看我們之前定義的視圖處理函數如下:

  • 第一個視圖函數的定義和配置,修改mysite/polls/views.py文件如下
from django.http import HttpResponse
# 訪問應用首頁
def index(request):
    return HttpResponse("Hello Django!")

polls/urls.py中添加路由配置

import django.conf.urls import url
from . import views
# 配置路由操作
urlpatterns = [
    url(r"^$", views.index, name="index")
]

mysite/mysite/urls.py中將應用中的路由文件包含進去

urlpatterns = [
    url(r"^admin/", admin.site.urls),
    url(r"^polls/", include("polls.urls"))
]

OK,配置結束,此時就可以在瀏覽器中直接訪問我們的應用了
python3 manage.py runserver啟動項目
瀏覽器中訪問:http://localhost:8000/polls就OK了

3.多視圖處理函數及接收參數

接下來,我們定義多個視圖處理函數,并定義接收的參數

修改polls/views.py文件,添加如下的幾個視圖函數

import django.http import HttpResponse
import .models import Question

# 首頁視圖處理函數
def index(request):
    # 查詢所有的問題
    question_list = Question.object.order_by("-pub_date")
    # 拼接所有的問題
    output = ", ".join([q.question_text for q in question_list])
    # 返回視圖
    return HttpResponse(output)

# 定義問題詳情視圖
def detail(request, question_id):
    # 根據主鍵查詢一個問題對象
    question = Question.objects.get(pk=question_id)
    # 返回視圖
    return HttpResponse("你要查看編號為<%s>的問題是:%s" % (question_id, question.question_text))

# 定義結果視圖
def result(request, question_id):
    # 直接返回一個視圖
    return HttpResponse("您正在查看編號為<%s>的問題的結果" % question_id)

# 定義投票處理
def vote(request, question_id):
    # 直接返回一個視圖
    return HttpResponse("您準備給編號為<%s>的問題投票嗎" % question_id)

接下來,修改polls/urls.py路由配置文件

from django.conf.urls import url

urlpatterns = [
     url(r"^$", views.index, name="index"),
     url(r"^(?P<question_id>\d+)$", views.detail, name="detail"),
     url(r"^(?P<question_id>\d+)/results/$", views.results, name="results"),
     url(r"^(?P<question_id>\d+)/vote/$", views.vote, name="vote"),
]

OK,多個視圖的處理函數就配置完成了,訪問模式如下

瀏覽器請求:http://localhost:8000/polls/
處理函數:index
瀏覽器請求:http://localhost:8000/polls/1
處理函數:detail
瀏覽器請求:http://localhost:8000/polls/1/results
處理函數:results
瀏覽器請求:http://localhost:8000/2/vote
處理函數:vote

大家可以自己試試哦~~

未完待續,下一節,將會是里程碑的一節內容,HTML頁面會出現在我們的web項目中


Django來敲門
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容