編寫你的第一個web應用程序1

在shell中運行如下命令來檢查django是否已安裝及其版本python

python -m django --version

若是django已經安裝,你應該看到安裝的版本號,若是尚未安裝,你會看到一個‘no module named django’的錯誤web

 

建立一個項目正則表達式

django-admin startproject mysite

這將會在你的當前目錄下生成一個mysite目錄shell

注意,你給項目命名時,項目名稱不能和python或django的內部組件名稱同名,尤爲,你應該避免使用相似django(與django自己衝突)或test(與內置python包衝突)這樣的名稱數據庫

 

咱們看看startproject創造了什麼django

mysite/ manage.py mysite/
        __init__.py settings.py urls.py wsgi.py

外部mysite/根目錄只是項目的容器,它的名字對django來講可有可無,你能夠將它重名名爲你喜歡的任何東西瀏覽器

manage.py:一個命令行實用程序,容許您以各類方式與此django項目進行交互,您能夠manage.py在django-admin和manage.py中閱讀有關的全部詳細信息服務器

內部mysite/目錄是項目的實際python包,它的名稱是您須要用來導入其中任何內容的python包名稱(例如mysite.urls)網絡

mysite/__init__.py:一個空文件,告訴python該目錄應該被視爲python包app

mysite/settings.py:此django項目的設置/配置。django設置將告訴您有關設置如何工做的全部信息

mysite/urls.py:這個django項目的url聲明,您的django支持的站點的‘目錄’

mysite/wsgi.py:與wsgi兼容的web服務器的入口點,用於爲您的項目提供服務

 

開發服務器

驗證您的django項目是否有效,mysite若是還沒有更改到外部目錄,請運行如下命令

python manage.py runserver

您將在命令行看到如下輸出

Performing system checks... System check identified no issues (0 silenced). You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them. August 04, 2018 - 15:50:53 Django version 1.11, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.

暫時忽略有關未應用數據庫遷移的警告,咱們很快就會處理數據庫

您已經啓動了django開發服務器,這是一個純粹用python編寫的輕量級web服務器,咱們已經將它包含在django中,所以您能夠快速開發,而無需處理配置生產服務器(如Apache),直到您準備好進行生產

注意:不要在相似生產環境的任何地方使用這個服務器,它僅用於開發時使用

如今服務器正在運行,使用web瀏覽器訪問http://127.0.0.1:8000,你會看到一個‘歡迎來到django’的頁面

默認該runserver命令在端口8000的內部ip上啓動開發服務器

若是要更改服務器的端口,請將其做爲命令行參數傳遞

python manage.py runserver 8080

若是要更改服務器的ip,請將其與端口一塊兒傳遞,例如,要監聽全部可用的公共ip,若是你想要在網絡上的其餘計算機上展現你的工做,這頗有用

python manage.py runserver 0:8000

0是0.0.0.0的快捷方式

開發服務器根據須要自動爲每一個請求從新加載python代碼,您無需從新啓動服務器便可使代碼更改生效,可是,某些操做(如添加文件)不會觸發從新啓動,所以在這些狀況下您必須從新啓動服務器

 

建立民意調查應用

在django編寫的每一個應用程序都包含一個遵循特定約定的python包。django附帶了一個實用程序,能夠自動生成應用程序的基本目錄結構,所以您能夠專一於編寫代碼而不是建立目錄

 

項目和應用

項目和應用程序之間有什麼區別?應用程序是執行某些操做的web應用程序,例如,weblog系統,公共記錄數據庫或簡單的輪詢應用程序,

項目是特定網站的配置和應用程序的集合。項目能夠包含多個應用程序,一個應用程序能夠在多個項目中

 

您的應用程序能夠存在於python路徑的任何位置,在本教程中,咱們將您的manage.py文件旁邊建立咱們的民意調查應用程序,以即可以將其導入爲本身的頂級模塊,而不是子模塊mysite

要建立應用程序,請確保您於該目錄位於同一目錄中manage.py並鍵入如下命令

python manage.py startapp polls

建立一個目錄polls,其佈局以下:

polls/
    __init__.py admin.py apps.py migrations/
        __init__.py models.py tests.py views.py

此目錄結構將容納輪詢應用程序

 

寫下你的第一個視圖

打開文件polls/views.py並在其中放入如下python代碼

from django.http import HttpResponse def index(request): return HttpResponse('hello,world')

這是django最簡單的視圖,要調用視圖,咱們須要將其映射到url,爲此咱們須要一個urlconf

要在polls目錄中建立urlconf,請建立一個名爲url.py的文件,您的app目錄如今應該以下所示

polls/
    __init__.py admin.py apps.py migrations/
        __init__.py models.py tests.py urls.py views.py

在該polls/urls.py文件中包含如下代碼

from django.conf.urls import url from . import views#等同於from polls import views
 urlpatterns=[ url(r'^$',views.index,name='index'), ]

下一步是將根urlconf指向polls.urls模塊,在mysite/urls.py,添加導入django.conf.urls.include並include()在urlpatterns列表中插入,因此你有:

from django.conf.urls import include,url from django.contrib import admin urlpatterns=[ url(r'^polls/',include('polls.urls')), url(r'^admin/',admin.site.urls), ]

該include()函數容許引用其餘urlconf。請注意,該include()函數的正則表達式沒有$(字符串結尾匹配字符),而是一個尾部斜槓。每當django遇到include(),它都會刪除與該點匹配的url的任何部分,並將剩餘的字符串發送到包含的urlconf以進行進一步的處理

背後的想法,include()是使即插即用的url變得容易,因爲民意調查位於他們本身的urlconf(polls/urls.py)中,所以能夠將它們放在‘/polls/’下,或‘/content/polls/’下,或任何其餘路徑根目錄下,而且應用仍會工做

 

何時用include()

include()當您包含其餘url模式時,應始終使用。admin.site.urls是唯一的例外

 

與你看到的不符?

若是您看到的include(admin.site.urls)不是公正的admin.site.urls,那麼您可能正在使用與本教程版本不匹配的django版本,您將要切換到較舊的教程或較新的Django版本。

 

您如今已將index視圖鏈接到URLconf。讓咱們驗證它是否正常工做,運行如下命令:

python manage.py runserver

在瀏覽器中轉到http://localhost:8000/polls/,您應該看到文本‘hello,world’,您在index視圖中定義的

該url()函數傳遞了四個參數,兩個必需:regex和view,以及兩個可選:kwargs,和name。在這一點上,值得回顧一下這些論點的用途

 

url()參數:正則表達式

它是用於匹配字符串中的模式的語法,或者在這種狀況下是url模式。django從第一個正則表達式開始,沿着列表向下,將請求的url與每一個正則表達式進行比較,直到找到匹配的正則表達式

 

請注意,這些正則表達式不會搜索GET和POST參數或域名。例如,在請求中

https://www.example.com/myapp/,URLconf將查找myapp/在請求中

https://www.example.com/myapp/?page=3,URLconf也會查找myapp/

 

只須要知道如何捕獲簡單模式,複雜的正則表達式具備較差的查找性能,

最後,一個性能說明,這些正則表達式是在第一次加載urlconf模塊時編譯的,它們超快(只要查找不是太複雜)

 

url()參數:視圖

當django找到正則表達式匹配是,django調用指定的視圖函數,將HttpRequest對象做爲第一個參數,將正則表達式中的任何‘捕獲’值做爲其餘參數,若是正則表達式使用簡單捕獲,則值將做爲位置參數傳遞,若是它使用命名捕獲,則值將做爲關鍵字參數傳遞

 

url()參數:kwargs

任意關鍵字參數能夠在字典中傳遞到目標視圖,咱們不打算在教程中使用這個功能

 

url()參數:名稱

命名您的url可以讓您從django的其餘地方明確的引用它,尤爲是在模板中,此強大功能容許您在僅觸摸單個文件的同時對項目的url模式進行全局更改

相關文章
相關標籤/搜索