编写你的第一个 Django 应用,第 1 部分
Hello,我是 Alex 007,一個熱愛計算機編程和硬件設計的小白,為啥是007呢?因為叫 Alex 的人太多了,再加上每天007的生活,Alex 007就誕生了。
編寫你的第一個 Django 應用,第 1 部分
安裝完Django之后相信你已經(jīng)迫不及待的想開始寫代碼了,接下來我們將通過一個示例學習,創(chuàng)建一個基本的投票應用程序。也許接下來我的操作你還不能完全理解明白,沒關(guān)系,先通過這個例子熟悉一下Django項目的開發(fā)流程,具體的組件我們會在后續(xù)一一講解。
我們來創(chuàng)建一個基本的投票應用程序。
它將由兩部分組成:
- 一個讓人們查看和投票的公共站點。
- 一個讓你能添加、修改和刪除投票的管理站點。
創(chuàng)建項目
如果這是你第一次使用 Django 的話,你需要一些初始化設置。也就是說,你需要用一些自動生成的代碼配置一個 Django project —— 即一個 Django 項目實例需要的設置項集合,包括數(shù)據(jù)庫配置、Django 配置和應用程序配置。
讓我們看看 startproject 創(chuàng)建了些什么:
mysite/manage.pymysite/__init__.pysettings.pyurls.pyasgi.pywsgi.py這些目錄和文件的用處是:
- 最外層的 mysite/ 根目錄只是你項目的容器, 根目錄名稱對Django沒有影響,你可以將它重命名為任何你喜歡的名稱。
- manage.py: 一個讓你用各種方式管理 Django 項目的命令行工具。你可以閱讀 django-admin and manage.py 獲取所有 manage.py 的細節(jié)。
- 里面一層的 mysite/ 目錄包含你的項目,它是一個純 Python 包。它的名字就是當你引用它內(nèi)部任何東西時需要用到的 Python 包名。 (比如 mysite.urls).
- mysite/__init__.py:一個空文件,告訴 Python 這個目錄應該被認為是一個 Python 包。如果你是 Python 初學者,閱讀官方文檔中的 更多關(guān)于包的知識。
- mysite/settings.py:Django 項目的配置文件。如果你想知道這個文件是如何工作的,請查看 Django 配置 了解細節(jié)。
- mysite/urls.py:Django 項目的 URL 聲明,就像你網(wǎng)站的“目錄”。閱讀 URL調(diào)度器 文檔來獲取更多關(guān)于 URL 的內(nèi)容。
- mysite/asgi.py:作為你的項目的運行在 ASGI 兼容的Web服務器上的入口。閱讀 如何使用 WSGI 進行部署 了解更多細節(jié)。
- mysite/wsgi.py:作為你的項目的運行在 WSGI 兼容的Web服務器上的入口。閱讀 如何使用 WSGI 進行部署 了解更多細節(jié)。
用于開發(fā)的簡易服務器
讓我們來確認一下你的 Django 項目是否真的創(chuàng)建成功了。如果你的當前目錄不是外層的 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.七月 10, 2020 - 15:50:53 Django version 3.0, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.注解
忽略有關(guān)未應用最新數(shù)據(jù)庫遷移的警告,稍后我們處理數(shù)據(jù)庫。
你剛剛啟動的是 Django 自帶的用于開發(fā)的簡易服務器,它是一個用純 Python 寫的輕量級的 Web 服務器。將這個服務器內(nèi)置在 Django 中是為了讓你能快速的開發(fā)出想要的東西,因為你不需要進行配置生產(chǎn)級別的服務器(比如 Apache)方面的工作,除非你已經(jīng)準備好投入生產(chǎn)環(huán)境了。
千萬不要 將這個服務器用于和生產(chǎn)環(huán)境相關(guān)的任何地方。這個服務器只是為了開發(fā)而設計的。
現(xiàn)在,服務器正在運行,瀏覽器訪問 https://127.0.0.1:8000/。你將會看到一個“祝賀”頁面,隨著一只火箭發(fā)射,服務器已經(jīng)運行了。
更換端口
默認情況下,runserver 命令會將服務器設置為監(jiān)聽本機內(nèi)部 IP 的 8000 端口。
如果你想更換服務器的監(jiān)聽端口,請使用命令行參數(shù)。舉個例子,下面的命令會使服務器監(jiān)聽 8080 端口:
python manage.py runserver 8080
如果你想要修改服務器監(jiān)聽的IP,在端口之前輸入新的。比如,為了監(jiān)聽所有服務器的公開IP(這你運行 Vagrant 或想要向網(wǎng)絡上的其它電腦展示你的成果時很有用),使用:
python manage.py runserver 0:8000
0 是 0.0.0.0 的簡寫。
完整的關(guān)于開發(fā)服務器的文檔可以在 :djamdin:runserver 參考文檔中找到。
創(chuàng)建投票應用
現(xiàn)在你的開發(fā)環(huán)境——這個“項目” ——已經(jīng)配置好了,你可以開始干活了。
在 Django 中,每一個應用都是一個 Python 包,并且遵循著相同的約定。Django 自帶一個工具,可以幫你生成應用的基礎目錄結(jié)構(gòu),這樣你就能專心寫代碼,而不是創(chuàng)建目錄了。
項目 VS 應用
項目和應用有什么區(qū)別?
應用是一個專門做某件事的網(wǎng)絡應用程序——比如博客系統(tǒng),或者公共記錄的數(shù)據(jù)庫,或者小型的投票程序。
項目則是一個網(wǎng)站使用的配置和應用的集合。項目可以包含很多個應用。應用可以被很多個項目使用。
你的應用可以存放在任何 Python path 中定義的路徑。在這個教程中,我們將在你的 manage.py 同級目錄下創(chuàng)建投票應用。這樣它就可以作為頂級模塊導入,而不是 mysite 的子模塊。
請確定你現(xiàn)在處于 manage.py 所在的目錄下,然后運行這行命令來創(chuàng)建一個應用:
python manage.py startapp polls這將會創(chuàng)建一個 polls 目錄,它的目錄結(jié)構(gòu)大致如下:
polls/__init__.pyadmin.pyapps.pymigrations/__init__.pymodels.pytests.pyviews.py這個目錄結(jié)構(gòu)包括了投票應用的全部內(nèi)容。
編寫第一個視圖
讓我們開始編寫第一個視圖吧。打開 polls/views.py,把下面這些 Python 代碼輸入進去:
from django.http import HttpResponsedef index(request):return HttpResponse("Hello, world. You're at the polls index.")這是 Django 中最簡單的視圖。如果想看見效果,我們需要將一個 URL 映射到它——這就是我們需要 URLconf 的原因了。
為了創(chuàng)建 URLconf,請在 polls 目錄里新建一個 urls.py 文件。你的應用目錄現(xiàn)在看起來應該是這樣:
polls/__init__.pyadmin.pyapps.pymigrations/__init__.pymodels.pytests.pyurls.pyviews.py在 polls/urls.py 中,輸入如下代碼:
from django.urls import pathfrom . import viewsurlpatterns = [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, pathurlpatterns = [path('polls/', include('polls.urls')),path('admin/', admin.site.urls), ]函數(shù) include() 允許引用其它 URLconfs。每當 Django 遇到 include() 時,它會截斷與此項匹配的 URL 的部分,并將剩余的字符串發(fā)送到 URLconf 以供進一步處理。
我們設計 include() 的理念是使其可以即插即用。因為投票應用有它自己的 URLconf( polls/urls.py ),他們能夠被放在 “/polls/” , “/fun_polls/” ,"/content/polls/",或者其他任何路徑下,這個應用都能夠正常工作。
何時使用 include()
當包括其它 URL 模式時你應該總是使用 include() , admin.site.urls 是唯一例外。
你現(xiàn)在把 index 視圖添加進了 URLconf。通過以下命令驗證是否正常工作:
python manage.py runserver用你的瀏覽器訪問 http://localhost:8000/polls/,你應該能夠看見 “Hello, world. You’re at the polls index.” ,這是你在 index 視圖中定義的。
沒有找到頁面?
如果你在這里得到了一個錯誤頁面,檢查一下你是不是正訪問著http://localhost:8000/polls/ 而不應該是 http://localhost:8000/。
函數(shù) path() 具有四個參數(shù),兩個必須參數(shù):route 和 view,兩個可選參數(shù):kwargs 和 name。現(xiàn)在,是時候來研究這些參數(shù)的含義了。
path() 參數(shù): route?
route 是一個匹配 URL 的準則(類似正則表達式)。當 Django 響應一個請求時,它會從 urlpatterns 的第一項開始,按順序依次匹配列表中的項,直到找到匹配的項。
這些準則不會匹配 GET 和 POST 參數(shù)或域名。例如,URLconf 在處理請求 https://www.example.com/myapp/ 時,它會嘗試匹配 myapp/ 。處理請求 https://www.example.com/myapp/?page=3 時,也只會嘗試匹配 myapp/。
path() 參數(shù): view?
當 Django 找到了一個匹配的準則,就會調(diào)用這個特定的視圖函數(shù),并傳入一個 HttpRequest 對象作為第一個參數(shù),被“捕獲”的參數(shù)以關(guān)鍵字參數(shù)的形式傳入。
path() 參數(shù): kwargs?
任意個關(guān)鍵字參數(shù)可以作為一個字典傳遞給目標視圖函數(shù)。本教程中不會使用這一特性。
path() 參數(shù): name?
為你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。這個有用的特性允許你只改一個文件就能全局地修改某個 URL 模式。
下一節(jié):編寫你的第一個 Django 應用,第 2 部分
總結(jié)
以上是生活随笔為你收集整理的编写你的第一个 Django 应用,第 1 部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编写你的第一个 Django 应用,第
- 下一篇: 高级指引——手动创建节点分组 Group