檢查Django版本
假定你已經(jīng)閱讀了 安裝 Django揭朝。你可以在命令提示行輸入命令(macOS/liunx)
python -m django --version
如果這行命令輸出了一個版本號不狮,證明你已經(jīng)安裝了此版本的 Django;如果你得到的是一個“No module named django”的錯誤提示兔朦,則表明你還未安裝偷线。
這里使用的Django 2.1 ,它支持 Python 3.5 和后續(xù)版本沽甥。如果你正在使用一個較老版本的 Python声邦,在 我應(yīng)該使用哪個版本的 Python 來配合 Django? 查找一個合適的 Django 版本。
創(chuàng)建項目
打開命令行摆舟,cd 到一個你想放置你代碼的目錄亥曹,然后運行以下命令(macOS/liunx):
django-admin startproject mysite
這行代碼將會在當前目錄下創(chuàng)建一個 mysite
目錄。如果命令失敗了恨诱,查看 運行django-admin
時遇到的問題媳瞪,可能能給你提供幫助。
讓我們看看 startproject
創(chuàng)建了些什么:
mysite/ # 根目錄只是你項目的容器照宝, Django 不關(guān)心它的名字蛇受,你可以將它重命名為任何你喜歡的名字。
manage.py #一個讓你用各種方式管理 Django 項目的命令行工具厕鹃。你可以閱讀 [django-admin and manage.py](https://docs.djangoproject.com/zh-hans/2.1/ref/django-admin/) 獲取所有 `manage.py` 的細節(jié)兢仰。
mysite/ #目錄包含你的項目乍丈,它是一個純 Python 包。它的名字就是當你引用它內(nèi)部任何東西時需要用到的 Python 包名把将。 (比如 mysite.urls).
__init__.py # 一個空文件轻专,告訴 Python 這個目錄應(yīng)該被認為是一個 Python 包。而不是一個普通文件夾
settings.py # Django 項目的配置文件秸弛。如果你想知道這個文件是如何工作的,請查看 [Django settings](https://docs.djangoproject.com/zh-hans/2.1/topics/settings/) 了解細節(jié)洪碳。
urls.py # Django 項目的 URL 聲明递览,就像你網(wǎng)站的“目錄”。閱讀 [URL調(diào)度器](https://docs.djangoproject.com/zh-hans/2.1/topics/http/urls/) 文檔來獲取更多關(guān)于 URL 的內(nèi)容瞳腌。
wsgi.py # 作為你的項目的運行在 WSGI 兼容的Web服務(wù)器上的入口绞铃。閱讀 [如何使用 WSGI 進行部署](https://docs.djangoproject.com/zh-hans/2.1/howto/deployment/wsgi/) 了解更多細節(jié)。
啟動 Django 自帶的用于開發(fā)的簡易服務(wù)器
讓我們來確認一下你的 Django 項目是否真的創(chuàng)建成功了嫂侍。請切換到 mysite 目錄(項目根目錄)儿捧,然后運行下面的命令(macOS/liunx):
python manage.py runserver
你應(yīng)該會看到如下輸出:
<pre class="literal-block" style="font-family: "Fira Mono", Consolas, Menlo, Monaco, "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-rendering: optimizespeed; color: rgb(12, 75, 51); border: 1px solid rgb(234, 234, 234); background: rgb(248, 248, 248); overflow: auto; border-radius: 4px; margin: 25px 0px; padding: 10px 20px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">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.
三月 30, 2019 - 15:50:53
Django version 2.1, using settings 'mysite.settings'
Starting development server at [http://127.0.0.1:8000/](http://127.0.0.1:8000/)
Quit the server with CONTROL-C.</pre>
剛剛啟動的是 Django 內(nèi)置的用于開發(fā)的簡易服務(wù)器,它是一個用純 Python 寫的輕量級的 Web 服務(wù)器挑宠。因為你不需要進行配置生產(chǎn)級別的服務(wù)器(比如 Apache)方面的工作菲盾。
現(xiàn)在是個提醒你的好時機:千萬不要 將這個服務(wù)器用于和生產(chǎn)環(huán)境相關(guān)的任何地方。這個服務(wù)器只是為了開發(fā)而設(shè)計的各淀。(我們在 Web 框架方面是專家懒鉴,在 Web 服務(wù)器方面并不是。)
現(xiàn)在碎浇,服務(wù)器正在運行临谱,瀏覽器訪問 https://127.0.0.1:8000/。你將會看到一個“祝賀”頁面奴璃,隨著一只火箭發(fā)射悉默,服務(wù)器已經(jīng)運行了。
停止服務(wù)
在剛才的命令窗口按:control+c
更換端口
默認情況下苟穆,runserver
命令會將服務(wù)器設(shè)置為監(jiān)聽本機內(nèi)部 IP 的 8000 端口抄课。
如果你想更換服務(wù)器的監(jiān)聽端口,請使用命令行參數(shù)雳旅。舉個例子剖膳,下面的命令會使服務(wù)器監(jiān)聽 8080 端口(macOS/liunx):
python manage.py runserver 8080
如果你想要修改服務(wù)器監(jiān)聽的IP,在端口之前輸入新的ip岭辣。比如吱晒,為了監(jiān)聽所有服務(wù)器的公開IP(你想要向網(wǎng)絡(luò)上的其它電腦展示你的成果時很有用),使用命令(macOS/liunx):
python manage.py runserver 0:8000
0 是 0.0.0.0 的簡寫沦童。完整的關(guān)于開發(fā)服務(wù)器的文檔可以在 :djamdin:runserver
參考文檔中找到仑濒。
注意:
如果127.0.0.1:8000 能訪問叹话,而用本機ip訪問不了,并且錯誤信息提示:Invalid HTTP_HOST header: '10.177.15.139:8080'. You may need to add '10.177.15.139' to ALLOWED_HOSTS.
解決方案:
將setting.py 文件的ALLOWED_HOSTS
字段的值修改為 ALLOWED_HOSTS = ['*']
創(chuàng)建投票應(yīng)用
現(xiàn)在你的開發(fā)環(huán)境——這個“項目” ——已經(jīng)配置好了墩瞳,你可以開始干活了驼壶。
在 Django 中,每一個應(yīng)用都是一個 Python 包喉酌,并且遵循著相同的約定热凹。Django 自帶一個工具,可以幫你生成應(yīng)用的基礎(chǔ)目錄結(jié)構(gòu)泪电,這樣你就能專心寫代碼般妙,而不是創(chuàng)建目錄了。
項目 VS 應(yīng)用
應(yīng)用是一個專門做某件事的網(wǎng)絡(luò)應(yīng)用程序——比如博客系統(tǒng)相速,或者公共記錄的數(shù)據(jù)庫菩貌,或者簡單的投票程序欺嗤。項目則是一個網(wǎng)站使用的配置和應(yīng)用的集合。項目可以包含很多個應(yīng)用。應(yīng)用可以被很多個項目使用罩扇。(我把它理解成類與方法的概念)
請確定你現(xiàn)在處于 mysite 目錄中税弃,我們將在你的 manage.py 同級目錄下創(chuàng)建投票應(yīng)用降盹。然后運行這行命令來創(chuàng)建一個應(yīng)用(macOS/liunx):
python manage.py startapp polls
這將會創(chuàng)建一個 polls 目錄馅笙,它的目錄結(jié)構(gòu)大致如下:
mysite/ # 項目根目錄,上面介紹過蔬捷,這里不做介紹
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
這個目錄結(jié)構(gòu)包括了投票應(yīng)用的全部內(nèi)容集峦。
編寫第一個視圖
讓我們開始編寫第一個視圖吧。打開 polls/views.py抠刺,把下面這些 Python 代碼輸入進去:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
這是 Django 中最簡單的視圖塔淤。如果想看見效果,我們需要將一個 URL 映射到它——這就是我們需要 URLconf 的原因了速妖。
為了創(chuàng)建 高蜂,請在 polls 目錄里新建一個 urls.py 文件。你的應(yīng)用目錄現(xiàn)在看起來應(yīng)該是這樣:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py # 心臟的URLconf 用于 URL 映射
views.py
在 polls/urls.py 中罕容,輸入如下代碼:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
下一步是要在根 URLconf 文件中指定我們創(chuàng)建的 polls.urls 模塊备恤。在 mysite/urls.py 文件的 urlpatterns 列表里插入一個 include(), 如下:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
函數(shù) include()
允許引用其它 URLconfs锦秒。當用戶請求:http://127.0.0.1:8000/index/ 時露泊,會先到根目錄到urlpatterns中進行正則匹配,每當 Django 遇到include()時旅择,它會截斷與此項匹配的 URL 的部分惭笑,并將剩余的字符串發(fā)送到指定目錄到 URLconf以供進一步處理。
現(xiàn)在可以驗證是否正常工作,運行下面的命令:
python manage.py runserver
用你的瀏覽器訪問 http://localhost:8000/polls/沉噩,你應(yīng)該能夠看見 "Hello, world. You're at the polls index." 捺宗,這是你在 index
視圖中定義的。
注意:
如果你在這里得到了一個錯誤頁面川蒙,檢查一下你是不是正訪問著http://localhost:8000/polls/ 而不應(yīng)該是 http://localhost:8000/蚜厉。