讓我們跟著例子學習。
貫穿整個教程,我們將會帶領你創建一個基礎的投票應用。
他有兩部分組成:
- 一個讓人們觀看民意和投票的公眾網站
- 一個可以讓你增加,修改和刪除投票的管理頁面。
我們假定你已經安裝了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個參數,兩個必須的:regex和 view,兩個可選的:kwargs,name.現在,很有必要復習下這四個參數。
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部分,開始使用數據庫。