讓我們跟著例子學習胸私。
貫穿整個教程,我們將會帶領(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ù)罗标,兩個必須的:regex和 view,兩個可選的:kwargs,name.現(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ù)庫颅筋。