pycharm+django之小試牛刀

        準備好好學習一下python,就從django開始吧,順帶了解一下網站的開發。今天在windows上安裝了python,django,以及酷炫吊的IDE——pycharm,學習資料主要是《the Django Book 2》,hello world的程序就不要詳細敘述了,比較簡單而且網上有很多例程,主要通過動態內容的實驗對django開發具有一個大致的認識。

一、新建工程

        第一個目標是創建一個顯示當前日期和時間的網頁。打開pycham,新建一個django的工程,避免了命令行下的繁瑣命令,命名爲time_test,application name命名爲show_time。可以看到工程目錄如下圖所示:



二、視圖函數

           所謂的視圖函數(或 視圖 ),只不過是一個接受 Web 請求並返回 Web 響應的 Python 函數。實際上,該響應可以是一份網頁的 HTML 內容、一次重定向、一條 404 錯誤、一份 XML 文檔、一幅圖片,或其它任何東西。視圖本身包含返回該響應所需的任意邏輯。該段代碼可以隨意放置,只要在 Python 的路徑設置中就可以了。沒有其它要求——也可以說是沒有任何奇特之處。在pycharm建立工程的時候,已經在應用程序的目錄下自動幫我們成生了視圖函數的程序views.py。
        打開views.py文件,編寫python代碼如下:
# coding=utf-8

from django.http import HttpResponse
import datetime

def current_datetime(request):
    # 計算當前日期和時間,並以 datetime.datetime 對象的形式保存爲局部變量 now
    now = datetime.datetime.now()

    #構建Html響應,使用now替換佔位符%s
    html = "<html><body>It is now %s.</body></html>" % now

    #返回一個包含所生成響應的HttpResponse對象
    return HttpResponse(html)


        每個視圖函數都以一個 HttpRequest 對象爲第一個參數,該參數通常命名爲 request 。

三、URL映射

        統一資源定位符(Uniform Resource Locator,縮寫爲URL)是對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。該視圖函數返回了包含當前日期和時間的一段 HTML 頁面。但是如何告訴 Django 使用這段代碼呢?這就是 URLconfs 粉墨登場的地方了。URLconf 就像是 Django 所支撐網站的目錄。它的本質是 URL 模式以及要爲該 URL 模式調用的視圖函數之間的映射表。你就是以這種方式告訴 Django,對於這個 URL 調用這段代碼,對於那個 URL 調用那段代碼。
        在建立工程的時候也已經自動生成了URLconf,即urls.py,打開文件,編輯如下:
from django.conf.urls import patterns, include, url
from show_time.views import current_datetime

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'time_test.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    (r'^time/$', current_datetime),
    #url(r'^admin/', include(admin.site.urls)),
)


        首先,我們從模塊中引入了 current_datetime 視圖。接着,我們加入了 (r'^time/$', current_datetime), 這一行。該行就是所謂的 URLpattern ,它是一個 Python 元組,其第一個元素是簡單的正則表達式,第二個元素是爲該模式應用的視圖函數。簡單來說,我們只是告訴 Django,所有指向 URL /time/ 的請求都應由 current_datetime 這個視圖函數來處理。

四、運行網頁

        在pycharm點擊運行,在下面的調試窗口中,可以看到如下的信息:

        在瀏覽器中打開地址:http://127.0.0.1:8000/time/,可以看到網站已經在運行了:

五、松耦合原則

        簡單的說,松耦合是一個 重要的保證互換性的軟件開發方法。如果兩段代碼是松耦合的,那麼改動其中一段代碼不會 影響另一段代碼,或者只有很少的一點影響。Django的URL配置就是一個很好的例子。在Django的應用程序中,URL的定義和視圖函數之間是松 耦合的,換句話說,決定URL返回哪個視圖函數和實現這個視圖函數是在兩個不同的地方。這使得 開發人員可以修改一塊而不會影響另一塊。
        比方說,考慮有一個以前寫的視圖函數,這個函數顯示當前日期和時間。如果我們想把它的URL 從原來的 /time/ 改變到 /currenttime/ ,我們只需要快速的修改一下URL配置即可, 不用擔心這個函數的內部實現。同樣的,如果我們想要修改這個函數的內部實現也不用擔心會影響 到對應的URL。此外,如果我們想要輸出這個函數到 一些 URL, 我們只需要修改URL配置而不用 去改動視圖的代碼。

六、動態URL

        在上面的實例中,雖然網頁的內容是動態的,但是URL是靜態的。在大多數動態web應用程序,URL通常都包含有相關的參數。讓我們創建第二個視圖來顯示當前時間和加上時間偏差量的時間,設計是這樣的: /time/plus/1/ 顯示當前時間+1個小時的頁面 /time/plus/2/ 顯示當前時間+2個小時的頁面 /time/plus/3/ 顯示當前時間+3個小時的頁面,以此類推。
       爲了讓程序更具有通用性,以及讓URL更加漂亮,我們需要使用正則表達式來規範我們的URL表達:
from django.conf.urls import patterns, include, url
from show_time.views import current_datetime, hours_ahead

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'time_test.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    (r'^time/$', current_datetime),
    (r'^time/plus/(\d{1,2})/$', hours_ahead),
    #url(r'^admin/', include(admin.site.urls)),
)


        我們把它限制在最大允許99個小時, 這樣我們就只允許一個或兩個數字,正則表達式的語法就是 \d{1,2} 。現在我們已經設計了一個帶通配符的URL,我們需要一個方法把它傳遞到視圖函數裏去,這樣 我們只用一個視圖函數就可以處理所有的時間段了。我們使用圓括號把參數在URL模式裏標識 出來。在這個例子中,我們想要把這些數字作爲參數,用圓括號把 \d{1,2} 包圍起來。
        現在開始寫 hours_ahead 視圖:
# coding=utf-8

from django.http import HttpResponse
import datetime

def current_datetime(request):
    # 計算當前日期和時間,並以 datetime.datetime 對象的形式保存爲局部變量 now
    now = datetime.datetime.now()

    #構建Html響應,使用now替換佔位符%s
    html = "<html><body>It is now %s.</body></html>" % now

    #返回一個包含所生成響應的HttpResponse對象
    return HttpResponse(html)

def hours_ahead(request, offset):
    offset = int(offset)
    dt = datetime.datetime.now() + datetime.timedelta(hours=offset)
    html = "<html><body>In %s hour(s), it will be %s.</body></html>" % (offset, dt)
    return HttpResponse(html)


        重新運行,在瀏覽器中輸入http://127.0.0.1:8000/time/plus/3/


----------------------------------------------------------------

歡迎大家轉載我的文章。

轉載請註明:轉自古-月

http://blog.csdn.net/hcx25909

歡迎繼續關注我的博客




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章