亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

在Django中創建第一個靜態視圖

2020-01-04 18:04:25
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了在Django中創建第一個靜態視圖的方法,與其他編程語言的開始一樣,以Hello world作為示例,需要的朋友可以參考下

正如我們的第一個目標,創建一個網頁,用來輸出這個著名的示例信息:

 

 
  1. Hello world. 

如果你曾經發布過Hello world頁面,但是沒有使用網頁框架,只是簡單的在hello.html文本文件中輸入Hello World,然后上傳到任意的一個網頁服務器上。 注意,在這個過程中,你已經說明了兩個關于這個網頁的關鍵信息: 它包括(字符串 "Hello world")和它的URL( http://www.example.com/hello.html , 如果你把文件放在子目錄,也可能是 http://www.example.com/files/hello.html)。

使用Django,你會用不同的方法來說明這兩件事 頁面的內容是靠view function(視圖函數) 來產生,URL定義在 URLconf 中。首先,我們先寫一個Hello World視圖函數。

在上一章使用django-admin.py startproject制作的mysite文件夾中,創建一個叫做views.py的空文件。這個Python模塊將包含這一章的視圖。 請留意,Django對于view.py的文件命名沒有特別的要求,它不在乎這個文件叫什么。但是根據約定,把它命名成view.py是個好主意,這樣有利于其他開發者讀懂你的代碼,正如你很容易的往下讀懂本文。

我們的Hello world視圖非常簡單。 這些是完整的函數和導入聲明,你需要輸入到views.py文件:

 

 
  1. from django.http import HttpResponse 
  2.  
  3. def hello(request): 
  4. return HttpResponse("Hello world"

我們逐行逐句地分析一遍這段代碼:

首先,我們從 django.http 模塊導入(import) HttpResponse 類。參閱附錄 H 了解更多關于 HttpRequest 和 HttpResponse 的細節。 我們需要導入這些類,因為我們會在后面用到。

接下來,我們定義一個叫做hello 的視圖函數。

每個視圖函數至少要有一個參數,通常被叫作request。 這是一個觸發這個視圖、包含當前Web請求信息的對象,是類django.http.HttpRequest的一個實例。在這個示例中,我們雖然不用request做任何事情,然而它仍必須是這個視圖的第一個參數。

注意視圖函數的名稱并不重要;并不一定非得以某種特定的方式命名才能讓 Django 識別它。 在這里我們把它命名為:hello,是因為這個名稱清晰的顯示了視圖的用意。同樣地,你可以用諸如:hello_wonderful_beautiful_world,這樣難看的短句來給它命名。 在下一小節(Your First URLconf),將告訴你Django是如何找到這個函數的。

這個函數只有簡單的一行代碼: 它僅僅返回一個HttpResponse對象,這個對象包含了文本“Hello world”。

這里主要講的是: 一個視圖就是Python的一個函數。這個函數第一個參數的類型是HttpRequest;它返回一個HttpResponse實例。為了使一個Python的函數成為一個Django可識別的視圖,它必須滿足這兩個條件。 (也有例外,但是我們稍后才會接觸到。

你的第一個URLconf

現在,如果你再運行:python manage.py runserver,你還將看到Django的歡迎頁面,而看不到我們剛才寫的Hello world顯示頁面。 那是因為我們的mysite項目還對hello視圖一無所知。我們需要通過一個詳細描述的URL來顯式的告訴它并且激活這個視圖。 (繼續我們剛才類似發布靜態HTML文件的例子?,F在我們已經創建了HTML文件,但還沒有把它上傳至服務器的目錄。)為了綁定視圖函數和URL,我們使用URLconf。

URLconf 就像是 Django 所支撐網站的目錄。 它的本質是 URL 模式以及要為該 URL 模式調用的視圖函數之間的映射表。 你就是以這種方式告訴 Django,對于這個 URL 調用這段代碼,對于那個 URL 調用那段代碼。 例如,當用戶訪問/foo/時,調用視圖函數foo_view(),這個視圖函數存在于Python模塊文件view.py中。

前一章中執行 django-admin.py startproject 時,該腳本會自動為你建了一份 URLconf(即 urls.py 文件)。 默認的urls.py會像下面這個樣子:

 

 
  1. from django.conf.urls.defaults import * 
  2.  
  3. # Uncomment the next two lines to enable the admin: 
  4. # from django.contrib import admin 
  5. # admin.autodiscover() 
  6.  
  7. urlpatterns = patterns(''
  8. # Example: 
  9. # (r'^mysite/', include('mysite.foo.urls')), 
  10.  
  11. # Uncomment the admin/doc line below and add 'django.contrib.admindocs' 
  12. # to INSTALLED_APPS to enable admin documentation: 
  13. # (r'^admin/doc/', include('django.contrib.admindocs.urls')), 
  14.  
  15. # Uncomment the next line to enable the admin: 
  16. # (r'^admin/', include(admin.site.urls)), 

默認的URLconf包含了一些被注釋起來的Django中常用的功能,僅僅只需去掉這些注釋就可以開啟這些功能. 下面是URLconf中忽略被注釋的行后的實際內容

 

 
  1. from django.conf.urls.defaults import * 
  2.  
  3. urlpatterns = patterns(''

讓我們逐行解釋一下代碼:

第一行導入django.conf.urls.defaults下的所有模塊,它們是Django URLconf的基本構造。 這包含了一個patterns函數。

第二行調用 patterns() 函數并將返回結果保存到 urlpatterns 變量。patterns函數當前只有一個參數—一個空的字符串。 (這個字符串可以被用來表示一個視圖函數的通用前綴。具體我們將在第八章里面介紹。)

當前應該注意是 urlpatterns 變量, Django 期望能從 ROOT_URLCONF 模塊中找到它。 該變量定義了 URL 以及用于處理這些 URL 的代碼之間的映射關系。 默認情況下,URLconf 所有內容都被注釋起來了——Django 應用程序還是白版一塊。 (注:那是上一節中Django怎么知道顯示歡迎頁面的原因。 如果 URLconf 為空,Django 會認定你才創建好新項目,因此也就顯示那種信息。

如果想在URLconf中加入URL和view,只需增加映射URL模式和view功能的Python tuple即可. 這里演示如何添加view中hello功能.

留意:為了簡潔,我們移除了注釋代碼。 如果你喜歡的話,你可以保留那些行。)

我們做了兩處修改。

首先,我們從模塊 (在 Python 的 import 語法中, mysite/views.py 轉譯為 mysite.views ) 中引入了 hello 視圖。 (這假設mysite/views.py在你的Python搜索路徑上。關于搜索路徑的解釋,請參照下文。)

接下來,我們為urlpatterns加上一行: (‘^hello/$', hello), 這行被稱作URLpattern,它是一個Python的元組。元組中第一個元素是模式匹配字符串(正則表達式);第二個元素是那個模式將使用的視圖函數。

簡單來說,我們只是告訴 Django,所有指向 URL /hello/ 的請求都應由 hello 這個視圖函數來處理。

#FormatStrongID_1#

Python 搜索路徑 就是使用 import 語句時,Python 所查找的系統目錄清單。

舉例來說,假定你將 Python 路徑設置為 ['','/usr/lib/python2.4/site-packages','/home/username/djcode/'] 。如果執行代碼 from foo import bar ,Python 將會首先在當前目錄查找 foo.py 模塊( Python 路徑第一項的空字符串表示當前目錄)。 如果文件不存在,Python將查找 /usr/lib/python2.4/site-packages/foo.py 文件。

如果你想看Python搜索路徑的值,運行Python交互解釋器,然后輸入:

 

  1. from django.conf.urls.defaults import * 
  2. from mysite.views import hello 
  3.  
  4. urlpatterns = patterns(''
  5. ('^hello/ 
  6. 請留意:為了簡潔,我們移除了注釋代碼。 如果你喜歡的話,你可以保留那些行。) 
  7.  
  8. 我們做了兩處修改。 
  9.  
  10. 首先,我們從模塊 (在 Python 的 import 語法中, mysite/views.py 轉譯為 mysite.views ) 中引入了 hello 視圖。 (這假設mysite/views.py在你的Python搜索路徑上。關于搜索路徑的解釋,請參照下文。) 
  11.  
  12. 接下來,我們為urlpatterns加上一行: (‘^hello/$', hello), 這行被稱作URLpattern,它是一個Python的元組。元組中第一個元素是模式匹配字符串(正則表達式);第二個元素是那個模式將使用的視圖函數。 
  13.  
  14. 簡單來說,我們只是告訴 Django,所有指向 URL /hello/ 的請求都應由 hello 這個視圖函數來處理。 
  15.  
  16. Python 搜索路徑 
  17.  
  18. Python 搜索路徑 就是使用 import 語句時,Python 所查找的系統目錄清單。 
  19.  
  20. 舉例來說,假定你將 Python 路徑設置為 ['','/usr/lib/python2.4/site-packages','/home/username/djcode/'] 。如果執行代碼 from foo import bar ,Python 將會首先在當前目錄查找 foo.py 模塊( Python 路徑第一項的空字符串表示當前目錄)。 如果文件不存在,Python將查找 /usr/lib/python2.4/site-packages/foo.py 文件。 
  21.  
  22. 如果你想看Python搜索路徑的值,運行Python交互解釋器,然后輸入: 
  23.  
  24.  
  25.  
  26. >>> import sys 
  27. >>> print sys.path 
  28.  
  29.  
  30. 通常,你不必關心 Python 搜索路徑的設置。 Python 和 Django 會在后臺自動幫你處理好。 
  31.  
  32. 討論一下URLpattern的語法是值得的,因為它不是顯而易見的。 雖然我們想匹配地址/hello/,但是模式看上去與這有點差別。 這就是為什么: 
  33.  
  34. Django在檢查URL模式前,移除每一個申請的URL開頭的斜杠(/)。 這意味著我們為/hello/寫URL模式不用包含斜杠(/)。(剛開始,這樣可能看起來不直觀,但這樣的要求簡化了許多工作,如URL模式內嵌,我們將在第八章談及。) 
  35.  
  36. 模式包含了一個尖號(^)和一個美元符號($)。這些都是正則表達式符號,并且有特定的含義: 上箭頭要求表達式對字符串的頭部進行匹配,美元符號則要求表達式對字符串的尾部進行匹配。 
  37.  
  38. 最好還是用范例來說明一下這個概念。 如果我們用尾部不是$的模式'^hello/',那么任何以/hello/開頭的URL將會匹配,例如:/hello/foo 和/hello/bar,而不僅僅是/hello/。類似地,如果我們忽略了尖號(^),即'hello/$',那么任何以hello/結尾的URL將會匹配,例如:/foo/bar/hello/。如果我們簡單使用hello/,即沒有^開頭和$結尾,那么任何包含hello/的URL將會匹配,如:/foo/hello/bar。因此,我們使用這兩個符號以確保只有/hello/匹配,不多也不少。 
  39.  
  40. 你大多數的URL模式會以^開始、以$結束,但是擁有復雜匹配的靈活性會更好。 
  41.  
  42. 你可能會問:如果有人申請訪問/hello(尾部沒有斜杠/)會怎樣。 因為我們的URL模式要求尾部有一個斜杠(/),那個申請URL將不匹配。 然而,默認地,任何不匹配或尾部沒有斜杠(/)的申請URL,將被重定向至尾部包含斜杠的相同字眼的URL。 (這是受配置文件setting中APPEND_SLASH項控制的,參見附件D。) 
  43.  
  44. 如果你是喜歡所有URL都以'/'結尾的人(Django開發者的偏愛),那么你只需要在每個URL后添加斜杠,并且設置”APPEND_SLASH”為”True”. 如果不喜歡URL以斜杠結尾或者根據每個URL來決定,那么需要設置”APPEND_SLASH”為”False”,并且根據你自己的意愿來添加結尾斜杠/在URL模式后. 
  45.  
  46. 另外需要注意的是,我們把hello視圖函數作為一個對象傳遞,而不是調用它。 這是 Python (及其它動態語言的) 的一個重要特性: 函數是一級對象(first-class objects), 也就是說你可以像傳遞其它變量一樣傳遞它們。 很酷吧? 
  47.  
  48. 啟動Django開發服務器來測試修改好的 URLconf, 運行命令行 python manage.py runserver 。 (如果你讓它一直運行也可以,開發服務器會自動監測代碼改動并自動重新載入,所以不需要手工重啟) 開發服務器的地址是 http://127.0.0.1:8000/ ,打開你的瀏覽器訪問 http://127.0.0.1:8000/hello/ 。 你就可以看到輸出結果了。 開發服務器將自動檢測Python代碼的更改來做必要的重新加載, 所以你不需要重啟Server在代碼更改之后。服務器運行地址`` http://127.0.0.1:8000/`` ,所以打開瀏覽器直接輸入`` http://127.0.0.1:8000/hello/`` ,你將看到由你的Django視圖輸出的Hello world。 
  49.  
  50. 萬歲! 你已經創建了第一個Django的web頁面。 
  51.  
  52. , hello), 
  53.  
  54.  
#FormatTableID_5#

通常,你不必關心 Python 搜索路徑的設置。 Python 和 Django 會在后臺自動幫你處理好。

討論一下URLpattern的語法是值得的,因為它不是顯而易見的。 雖然我們想匹配地址/hello/,但是模式看上去與這有點差別。 這就是為什么:

Django在檢查URL模式前,移除每一個申請的URL開頭的斜杠(/)。 這意味著我們為/hello/寫URL模式不用包含斜杠(/)。(剛開始,這樣可能看起來不直觀,但這樣的要求簡化了許多工作,如URL模式內嵌,我們將在第八章談及。)

模式包含了一個尖號(^)和一個美元符號($)。這些都是正則表達式符號,并且有特定的含義: 上箭頭要求表達式對字符串的頭部進行匹配,美元符號則要求表達式對字符串的尾部進行匹配。

最好還是用范例來說明一下這個概念。 如果我們用尾部不是$的模式'^hello/',那么任何以/hello/開頭的URL將會匹配,例如:/hello/foo 和/hello/bar,而不僅僅是/hello/。類似地,如果我們忽略了尖號(^),即'hello/$',那么任何以hello/結尾的URL將會匹配,例如:/foo/bar/hello/。如果我們簡單使用hello/,即沒有^開頭和$結尾,那么任何包含hello/的URL將會匹配,如:/foo/hello/bar。因此,我們使用這兩個符號以確保只有/hello/匹配,不多也不少。

你大多數的URL模式會以^開始、以$結束,但是擁有復雜匹配的靈活性會更好。

你可能會問:如果有人申請訪問/hello(尾部沒有斜杠/)會怎樣。 因為我們的URL模式要求尾部有一個斜杠(/),那個申請URL將不匹配。 然而,默認地,任何不匹配或尾部沒有斜杠(/)的申請URL,將被重定向至尾部包含斜杠的相同字眼的URL。 (這是受配置文件setting中APPEND_SLASH項控制的,參見附件D。)

如果你是喜歡所有URL都以'/'結尾的人(Django開發者的偏愛),那么你只需要在每個URL后添加斜杠,并且設置”APPEND_SLASH”為”True”. 如果不喜歡URL以斜杠結尾或者根據每個URL來決定,那么需要設置”APPEND_SLASH”為”False”,并且根據你自己的意愿來添加結尾斜杠/在URL模式后.

另外需要注意的是,我們把hello視圖函數作為一個對象傳遞,而不是調用它。 這是 Python (及其它動態語言的) 的一個重要特性: 函數是一級對象(first-class objects), 也就是說你可以像傳遞其它變量一樣傳遞它們。 很酷吧?

啟動Django開發服務器來測試修改好的 URLconf, 運行命令行 python manage.py runserver 。 (如果你讓它一直運行也可以,開發服務器會自動監測代碼改動并自動重新載入,所以不需要手工重啟) 開發服務器的地址是 http://127.0.0.1:8000/ ,打開你的瀏覽器訪問 http://127.0.0.1:8000/hello/ 。 你就可以看到輸出結果了。 開發服務器將自動檢測Python代碼的更改來做必要的重新加載, 所以你不需要重啟Server在代碼更改之后。服務器運行地址`` http://127.0.0.1:8000/`` ,所以打開瀏覽器直接輸入`` http://127.0.0.1:8000/hello/`` ,你將看到由你的Django視圖輸出的Hello world。

萬歲! 你已經創建了第一個Django的web頁面。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
3344国产精品免费看| www.日韩视频| 欧美大尺度在线观看| 国产精品白丝jk喷水视频一区| 色无极影院亚洲| 欧美另类极品videosbestfree| 国产一区视频在线播放| 亚洲人成在线一二| 欧美午夜丰满在线18影院| 亚洲精品黄网在线观看| 91tv亚洲精品香蕉国产一区7ujn| 欧美丝袜美女中出在线| 国内久久久精品| 国产黑人绿帽在线第一区| 中文字幕日韩欧美在线| 欧美在线观看网址综合| 在线a欧美视频| 久久久中文字幕| 亚洲精品日韩丝袜精品| www.美女亚洲精品| 深夜福利日韩在线看| 欧美特级www| 国产精品成久久久久三级| 97久久超碰福利国产精品…| 国产精品美腿一区在线看| 九九精品在线播放| 欧美成人sm免费视频| 亚洲天堂免费视频| 亚洲成人黄色网址| 精品一区电影国产| 91美女福利视频高清| 久久网福利资源网站| 亚洲精品久久久久久下一站| 欧美极品少妇xxxxⅹ裸体艺术| 日本久久精品视频| 国产精品久久久91| 日韩中文在线不卡| 91免费电影网站| 成人av在线网址| 欧美美女15p| 欧美激情综合亚洲一二区| 国产偷国产偷亚洲清高网站| 亚洲a区在线视频| 日韩在线激情视频| 欧美性高潮在线| 欧美大片在线免费观看| 欧美一区二区三区免费观看| 亚洲欧美国产高清va在线播| 欧美最猛性xxxx| 国产99久久精品一区二区 夜夜躁日日躁| 成人性生交大片免费看视频直播| 日韩在线视频中文字幕| 欧美黑人xxx| 精品美女国产在线| 久久青草福利网站| 成人免费直播live| 国产精品第1页| 久久久久久久久久久亚洲| 久久艳片www.17c.com| 久久久亚洲国产天美传媒修理工| 亚洲欧美中文字幕在线一区| 国产欧美中文字幕| 日韩成人高清在线| 亚洲美女视频网站| 久热99视频在线观看| 91视频免费网站| 久久男人资源视频| 日韩中文在线中文网在线观看| 韩国日本不卡在线| 亚洲伊人第一页| 91久久国产精品91久久性色| 亚洲人成网站在线播| 欧美激情综合亚洲一二区| 国产成人综合一区二区三区| 亚洲国产欧美一区二区三区久久| 亚洲成人中文字幕| 欧美另类极品videosbest最新版本| 国产成人短视频| 久久久亚洲福利精品午夜| 国产深夜精品福利| 国产精品免费小视频| 亚洲精品一区二区网址| 亚洲精品国产精品自产a区红杏吧| 欧美一级淫片丝袜脚交| 国产美女主播一区| 国产亚洲精品久久久| 亚洲v日韩v综合v精品v| 亚洲精品自产拍| 久久国产视频网站| 一区二区三区回区在观看免费视频| 91精品美女在线| 成人黄色片在线| 日韩高清电影好看的电视剧电影| 国产视频一区在线| 高潮白浆女日韩av免费看| 疯狂蹂躏欧美一区二区精品| 一区二区三区视频观看| 色综合久久精品亚洲国产| 日韩视频永久免费观看| 久久久久久久久亚洲| 欧美成人精品在线播放| 亚洲欧美国产一区二区三区| 精品视频在线播放色网色视频| 性欧美视频videos6一9| 日韩一区二区在线视频| 亚洲午夜性刺激影院| 国模极品一区二区三区| 久久精品亚洲热| 欧美大片第1页| 国产男人精品视频| 久久91超碰青草是什么| 日韩欧美在线国产| 久久免费视频在线| 亚州精品天堂中文字幕| 国内精品一区二区三区| 亚洲男子天堂网| 97香蕉超级碰碰久久免费的优势| 久久久久亚洲精品成人网小说| 久久精品成人动漫| 国产成人精品久久二区二区91| 国产精品va在线| 国产精品永久免费视频| 亚洲va久久久噜噜噜久久天堂| 日韩国产高清视频在线| 色综合天天狠天天透天天伊人| 最好看的2019的中文字幕视频| 日韩在线视频网站| 亚洲国产一区自拍| 不卡av电影在线观看| 97不卡在线视频| 亚洲国产成人精品久久久国产成人一区| 欧洲亚洲免费视频| 久久久久久久久久久亚洲| 欧美激情亚洲国产| 亚洲精品久久久久久久久久久| 在线观看精品国产视频| 91精品国产综合久久久久久蜜臀| 国产精品高潮呻吟久久av无限| 久久久午夜视频| 在线观看日韩www视频免费| 成人免费网视频| 亚洲国产精品成人精品| 国产精品美女免费视频| 国产精品一久久香蕉国产线看观看| 日韩精品在线免费观看| 欧美国产第二页| 日韩电影免费观看在线观看| 一区国产精品视频| 成人免费视频网址| 亚洲最大av在线| 国产成人91久久精品| 国产精品高潮在线| 国产成人综合亚洲| 国产精品小说在线| 一区二区三区天堂av| 国产精品久久久久久久久久东京| 久久伊人精品一区二区三区| 俺去了亚洲欧美日韩| 亚洲无线码在线一区观看| 成人精品视频久久久久| 久久精品视频中文字幕| 日韩成人高清在线| 91国内精品久久| 欧美日本国产在线|