第一個 Django 應(yīng)用太防,編寫第一個視圖

來自Django官方.png

檢查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: &quot;Fira Mono&quot;, Consolas, Menlo, Monaco, &quot;Courier New&quot;, 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

00.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/蚜厉。

參考:編寫你的第一個 Django 應(yīng)用,第 1 部分 | Django 文檔 | Django

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畜眨,一起剝皮案震驚了整個濱河市昼牛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌康聂,老刑警劉巖贰健,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異早抠,居然都是意外死亡霎烙,警方通過查閱死者的電腦和手機撬讽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門蕊连,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人游昼,你說我怎么就攤上這事甘苍。” “怎么了烘豌?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵载庭,是天一觀的道長。 經(jīng)常有香客問我廊佩,道長囚聚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任标锄,我火速辦了婚禮顽铸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘料皇。我一直安慰自己谓松,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布践剂。 她就那樣靜靜地躺著鬼譬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逊脯。 梳的紋絲不亂的頭發(fā)上优质,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音,去河邊找鬼盆赤。 笑死贾富,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的牺六。 我是一名探鬼主播颤枪,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼淑际!你這毒婦竟也來了畏纲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤春缕,失蹤者是張志新(化名)和其女友劉穎盗胀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锄贼,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡票灰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宅荤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屑迂。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖冯键,靈堂內(nèi)的尸體忽然破棺而出惹盼,到底是詐尸還是另有隱情,我是刑警寧澤惫确,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布手报,位于F島的核電站,受9級特大地震影響改化,放射性物質(zhì)發(fā)生泄漏掩蛤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一陈肛、第九天 我趴在偏房一處隱蔽的房頂上張望揍鸟。 院中可真熱鬧,春花似錦燥爷、人聲如沸蜈亩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稚配。三九已至,卻和暖如春港华,著一層夾襖步出監(jiān)牢的瞬間道川,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冒萄,地道東北人臊岸。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像尊流,于是被迫代替她去往敵國和親帅戒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

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