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

讓我們跟著例子學習胸私。
貫穿整個教程,我們將會帶領(lǐng)你創(chuàng)建一個基礎(chǔ)的投票應用鳖谈。
他有兩部分組成:

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

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

創(chuàng)建項目
如果你是第一次使用django疙驾,你要多注意一些初始化設(shè)置。換句話說郭毕,你需要自動生成一些代碼來構(gòu)建Django項目 - 設(shè)置Django實例的集合它碎,包括數(shù)據(jù)庫配置,特定于Djang的選項和特定于應用的設(shè)置显押。
在命令行輸入以下命令:

django-admin startproject mysite

讓我們看下startproject創(chuàng)建的目錄扳肛;

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

這些文件是:

  • 最外層的根目錄mysite/是你的項目的容器。它的名字與Django無關(guān)乘碑,你可以去重命名任何你喜歡的名字挖息。
  • manage.py:一個命令行實用程序,可以讓你與這個Django項目以不同的方式進行交互。你可以在django-admin and manage.py中查看更詳細的介紹兽肤。
  • 內(nèi)部結(jié)構(gòu)mysite/是你的項目的真實的Pytho包套腹。它的名字就是Python包名,你想要引用它里面的任何東西都需要它(例如 mysite.urls)
  • mysite/init.py:一個空的文件资铡,用來告訴Python,這個目錄是一個Python包电禀。如果你是一個新人,應該查看more
    about packages
    官方文檔笤休。
  • mysite/settings.py:設(shè)置或者配置你的Django項目尖飞。Django settings會告訴你settings怎么使用的。
  • mysite/urls.py:Django項目的url聲明店雅;你的Django網(wǎng)站的目錄政基。你可以在URL dispatcher了解更多
  • mysite/wsgi.py:WSGI兼容的Web服務(wù)器,為您的項目提供服務(wù)的入門點闹啦。查看更多細節(jié)How to deploy with WSGI

服務(wù)器開發(fā)
讓我們檢驗你的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.

你已經(jīng)開始了Django的服務(wù)器開發(fā)窍奋,一個純粹用Python開發(fā)的輕量級web服務(wù)器荐健。我們將其與Django結(jié)合在一起圣勒,因此您可以快速開發(fā),而無需處理配置生產(chǎn)服務(wù)器(如Apache摧扇,直到您準備好生產(chǎn)環(huán)境才能開發(fā))。
需要注意一下:不要在任何類似于生產(chǎn)環(huán)境的任何地方使用這個服務(wù)器挚歧。 它只適用于開發(fā)扛稽。 (我們正在開發(fā)Web框架,而不是Web服務(wù)器滑负。)
既然服務(wù)已經(jīng)運行了在张,用你的瀏覽器瀏覽http://127.0.0.1:8000。你將會看到“Welcome to Django ”頁面矮慕,說明它正常運行了帮匾。

改變端口號:

python manage.py runserver 8080

改變ip:

python manage.py runserver 0.0.0.0:8080

服務(wù)器自動重載
任何Python代碼的改動,服務(wù)器都會自動重載痴鳄,不需要手動重啟瘟斜。然而,像新增文件這種情況就需要手動重啟了痪寻。

創(chuàng)建Polls app
現(xiàn)在你的一個項目已經(jīng)建立起來了螺句,那么接下來開始工作吧。
按照慣例橡类,任何一個你在Django中的應用都有一個Python包組成蛇尚。Django有自動生成一個app的基礎(chǔ)目錄結(jié)構(gòu)的功能,所以你可以專心敲代碼顾画,而不用去創(chuàng)建一個個目錄取劫。

Projects vs Apps
項目和應用的區(qū)別是什么?App是一個可以做某些事的web 應用研侣,例如博客系統(tǒng)谱邪,公共記錄的數(shù)據(jù)庫或者一個簡單的投票應用。而Project是一個特定網(wǎng)站的配置和應用的集合庶诡。一個Project可以有多個app虾标,一個app可以在多個project中。

你的app可以放在Python路徑下的任何地方灌砖。在這篇教程中璧函,我們將在你的manage.py文件旁邊創(chuàng)建我們的poll app,以便它可以導入為自己的頂級模塊基显,而不是mysite的子模塊蘸吓。

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

python manage.py startapp polls

它的目錄是:

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

這個目錄結(jié)構(gòu)就構(gòu)成了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最近簡單的試圖库继。為了調(diào)用這個試圖箩艺,我們需要給它映射一個url,為了這么做宪萄,我們還需要一個URLconf艺谆。
為了在poll目錄中創(chuàng)建一個URLconf,我們創(chuàng)建一個urls.py文件“萦ⅲ現(xiàn)在静汤,你的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()函數(shù)的正則表達式不具有$(字符串結(jié)尾匹配字符),而是尾部斜線弄兜。 每當Django遇到include()時药蜻,它會排除與該點匹配的任何部分,并將剩余的字符串發(fā)送到包含的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版本班利。

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

python manage.py runserver

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

url()函數(shù)接收4個參數(shù)罗标,兩個必須的:regexview,兩個可選的:kwargsname.現(xiàn)在积蜻,很有必要復習下這四個參數(shù)闯割。

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

請注意锥忿,這些正則表達式不搜索GET和POST參數(shù)或域名牛郑。例如,在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發(fā)現(xiàn)正則表達式匹配時,Django會調(diào)用指定的視圖函數(shù)朦乏,使用HttpRequest對象作為第一個參數(shù)球及,并將正則表達式中的任何“捕獲”值作為其他參數(shù)。 如果正則表達式使用簡單的捕獲呻疹,則值作為位置參數(shù)傳遞; 如果它使用命名捕獲吃引,則值作為關(guān)鍵字參數(shù)傳遞。 我們稍后會給出一個例子刽锤。

url() argument:kwargs

任意關(guān)鍵詞參數(shù)可以在字典中傳遞到目標視圖镊尺。 我們不會在教程中使用Django的這個功能。

url() argument:name

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

當您對基本請求和響應流程比較熟悉了纺荧,請閱讀本教程的第2部分旭愧,開始使用數(shù)據(jù)庫颅筋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市输枯,隨后出現(xiàn)的幾起案子议泵,更是在濱河造成了極大的恐慌,老刑警劉巖桃熄,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件先口,死亡現(xiàn)場離奇詭異,居然都是意外死亡瞳收,警方通過查閱死者的電腦和手機碉京,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來螟深,“玉大人谐宙,你說我怎么就攤上這事〗缁。” “怎么了凡蜻?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長垢箕。 經(jīng)常有香客問我划栓,道長,這世上最難降的妖魔是什么条获? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任忠荞,我火速辦了婚禮,結(jié)果婚禮上帅掘,老公的妹妹穿的比我還像新娘钻洒。我一直安慰自己,他們只是感情好锄开,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布素标。 她就那樣靜靜地躺著,像睡著了一般萍悴。 火紅的嫁衣襯著肌膚如雪头遭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天癣诱,我揣著相機與錄音计维,去河邊找鬼。 笑死撕予,一個胖子當著我的面吹牛鲫惶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播实抡,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼欠母,長吁一口氣:“原來是場噩夢啊……” “哼欢策!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赏淌,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤踩寇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后六水,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俺孙,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年掷贾,在試婚紗的時候發(fā)現(xiàn)自己被綠了睛榄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡想帅,死狀恐怖场靴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情博脑,我是刑警寧澤憎乙,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布票罐,位于F島的核電站叉趣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏该押。R本人自食惡果不足惜疗杉,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚕礼。 院中可真熱鬧烟具,春花似錦、人聲如沸奠蹬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽囤躁。三九已至冀痕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狸演,已是汗流浹背言蛇。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宵距,地道東北人腊尚。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像满哪,于是被迫代替她去往敵國和親婿斥。 傳聞我的和親對象是個殘疾皇子劝篷,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容