編寫第一個django app,第一部分

讓我們跟著例子學習。
貫穿整個教程,我們將會帶領你創建一個基礎的投票應用。
他有兩部分組成:

  • 一個讓人們觀看民意和投票的公眾網站
  • 一個可以讓你增加,修改和刪除投票的管理頁面。
    我們假定你已經安裝了Django.使用下面的命令,你將會知道你是否安裝以及安裝的是哪個版本的Django
 python -m django --version

如果你安裝了的django,你就會看到你安裝的版本。否則你就會看到' No module named django'。

創建項目
如果你是第一次使用django,你要多注意一些初始化設置。換句話說,你需要自動生成一些代碼來構建Django項目 - 設置Django實例的集合,包括數據庫配置,特定于Djang的選項和特定于應用的設置。
在命令行輸入以下命令:

django-admin startproject mysite

讓我們看下startproject創建的目錄;

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

這些文件是:

  • 最外層的根目錄mysite/是你的項目的容器。它的名字與Django無關,你可以去重命名任何你喜歡的名字。
  • manage.py:一個命令行實用程序,可以讓你與這個Django項目以不同的方式進行交互。你可以在django-admin and manage.py中查看更詳細的介紹。
  • 內部結構mysite/是你的項目的真實的Pytho包。它的名字就是Python包名,你想要引用它里面的任何東西都需要它(例如 mysite.urls)
  • mysite/init.py:一個空的文件,用來告訴Python,這個目錄是一個Python包。如果你是一個新人,應該查看more
    about packages
    官方文檔。
  • mysite/settings.py:設置或者配置你的Django項目。Django settings會告訴你settings怎么使用的。
  • mysite/urls.py:Django項目的url聲明;你的Django網站的目錄。你可以在URL dispatcher了解更多
  • mysite/wsgi.py:WSGI兼容的Web服務器,為您的項目提供服務的入門點。查看更多細節How to deploy with WSGI

服務器開發
讓我們檢驗你的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.
April 08, 2017 - 15:50:53Django version 1.10, 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框架,而不是Web服務器。)
既然服務已經運行了,用你的瀏覽器瀏覽http://127.0.0.1:8000。你將會看到“Welcome to Django ”頁面,說明它正常運行了。

改變端口號:

python manage.py runserver 8080

改變ip:

python manage.py runserver 0.0.0.0:8080

服務器自動重載
任何Python代碼的改動,服務器都會自動重載,不需要手動重啟。然而,像新增文件這種情況就需要手動重啟了。

創建Polls app
現在你的一個項目已經建立起來了,那么接下來開始工作吧。
按照慣例,任何一個你在Django中的應用都有一個Python包組成。Django有自動生成一個app的基礎目錄結構的功能,所以你可以專心敲代碼,而不用去創建一個個目錄。

Projects vs Apps
項目和應用的區別是什么?App是一個可以做某些事的web 應用,例如博客系統,公共記錄的數據庫或者一個簡單的投票應用。而Project是一個特定網站的配置和應用的集合。一個Project可以有多個app,一個app可以在多個project中。

你的app可以放在Python路徑下的任何地方。在這篇教程中,我們將在你的manage.py文件旁邊創建我們的poll app,以便它可以導入為自己的頂級模塊,而不是mysite的子模塊。

確保你和manage.py在相同目錄,然后執行以下命令:

python manage.py startapp polls

它的目錄是:

polls/
    __init__.py
    admin.py
    migrations/
        __init.py__
    models.py
    tests.py
    views.py

這個目錄結構就構成了poll application

編寫你的第一個view
打開polls/views.py文件,添加如下代碼:

from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello,world.Your're at the polls index.")

這是Django最近簡單的試圖。為了調用這個試圖,我們需要給它映射一個url,為了這么做,我們還需要一個URLconf。
為了在poll目錄中創建一個URLconf,我們創建一個urls.py文件。現在,你的app的目錄變成下面這樣了:

polls/
    __init__.py
    admin.py
    migrations/
        __init.py__
    models.py
    tests.py
    urls.py
    views.py

polls/urls.py文件中,我們加入如下代碼:

from django.conf.urls import url
from . import views

urlpatterns =[
    url(r'^$',views.index,name='index'),
]

下一步就是在polls.urls模塊指定根URLconf。在mysite/urls.py中增加 django.conf.urls.include的引用,并在urlpatterns列表中增加一個include(),如下:

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()時,它會排除與該點匹配的任何部分,并將剩余的字符串發送到包含的URLconf進行進一步處理。

include()的背后的思想是使即插即用的URL變得容易。 由于polls是在自己的URLconf(polls / urls.py)中,它們可以放在“/ polls /”下或“/ fun_polls /”下或“/ content / polls /”或其他路徑根目錄下, 應用程序仍然可以工作。

使用include()
當您包含其他URL模式時,應始終使用include()。 admin.site.urls是唯一的例外。
如果和你看到的不一樣
如果你看到include(admin.site.urls)而不是admin.site.urls,你可能使用的Django版本與本教程版本不符。 您將需要切換到較舊的教程或較新的Django版本。

現在你把index連接到了URLconf中。讓我們檢驗一下它是否正常工作:

python manage.py runserver

現在用你的瀏覽器打開http://localhost:8000/polls/,你會看到"Hello,world.You're at the polls index.",正如你定義的index試圖那樣。

url()函數接收4個參數,兩個必須的:regexview,兩個可選的:kwargsname.現在,很有必要復習下這四個參數。

url() argument:regx
術語“regx”是一種常用的短格式,意思是“regular expression 正則表達式”,它是用于匹配字符串中的模式的語法,或者在這種情況下url模式。 Django從第一個正則表達式開始,并將其放在列表中,將請求的URL與每個正則表達式進行比較,直到找到匹配的一個。

請注意,這些正則表達式不搜索GET和POST參數或域名。例如,在https://www.example.com/myapp/的請求中,URLconf將尋找myapp /。在https://www.example.com/myapp/?page=3的請求中,URLconf還將查找myapp /

如果您需要正則表達式的幫助,請參閱維基百科的條目和re模塊的文檔。此外,Jeffrey Friedl的O'Reilly書“掌握正則表達式”也是非常棒的。然而,實際上,您不需要是正則表達式的專家,因為您只需要知道如何捕獲簡單的模式。實際上,復雜的正則表達式的查找性能會很差,所以你可能不應該依靠正則表達式的全部功能。

最后,一個性能說明:這些正則表達式是第一次加載URLconf模塊時被編譯。它們超級快(只要查找不是太復雜,如上所述)。

url() argument:view

當Django發現正則表達式匹配時,Django會調用指定的視圖函數,使用HttpRequest對象作為第一個參數,并將正則表達式中的任何“捕獲”值作為其他參數。 如果正則表達式使用簡單的捕獲,則值作為位置參數傳遞; 如果它使用命名捕獲,則值作為關鍵字參數傳遞。 我們稍后會給出一個例子。

url() argument:kwargs

任意關鍵詞參數可以在字典中傳遞到目標視圖。 我們不會在教程中使用Django的這個功能。

url() argument:name

命名您的URL可讓您從Django其他地方明確地引用它,特別是在模板中。 這個強大的功能可讓您通過只修改單個文件就可以全局性的更改項目的URL模式。

當您對基本請求和響應流程比較熟悉了,請閱讀本教程的第2部分,開始使用數據庫。

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

推薦閱讀更多精彩內容