Django的第一步(第一节)
寫下你的第一個(gè)Django應(yīng)用
第一部分
????讓我們通過例子來學(xué)習(xí).
????在本教程中,我們將引導(dǎo)您完成基本投票應(yīng)用程序的創(chuàng)建.
????其中包括兩部分:
- 一個(gè)讓人們查看民意調(diào)查并投票的公共網(wǎng)站.
- 允許您添加,更改和刪除民意調(diào)查的管理網(wǎng)站.
????我們假設(shè)你django已經(jīng)安裝好了,你可以通過下面的shell命令得知django的版本:
python -m django --version????如果django已經(jīng)安裝好了,你可以看到安裝的版本.如果沒有,你會(huì)得到錯(cuò)誤提示"No module named django".
????這個(gè)教程基于django2.0,支持python3.4以及后面的版本.如果django的版本不匹配,可以在右下角選擇合適的版本,或者升級(jí)django版本.如果你正在使用老版本的python,你可以根據(jù)下圖去找到合適的點(diǎn)擊django版本.
創(chuàng)建一個(gè)項(xiàng)目
????如果這是你第一次使用django,你會(huì)關(guān)心一些初始化設(shè)置.換句話說,你需要下面的指令自動(dòng)生成一個(gè)django項(xiàng)目,其中包含數(shù)據(jù)庫配置,django特定的選項(xiàng)和應(yīng)用特定的選項(xiàng).
????從命令行,cd進(jìn)入你想創(chuàng)建django項(xiàng)目的文件夾,然后執(zhí)行下面的指令:????
django-admin startproject mysite????這條命令將會(huì)在你的文件夾中創(chuàng)建一個(gè)mysite文件夾.
注釋:
? ? 你需要避免在創(chuàng)建django項(xiàng)目與python或django內(nèi)置組件相同,尤其是,你應(yīng)該避免使用django(與django本身發(fā)生沖突)或者test(與python內(nèi)置文件沖突).
代碼應(yīng)該放置在哪?
????如果你的背景是普通的舊PHP(沒有使用現(xiàn)代框架),那么你可能習(xí)慣于把代碼放在Web服務(wù)器的文檔根目錄下(比如/ var / www).用Django,你不這樣做.將任何Python代碼放入Web服務(wù)器的文檔根目錄中并不是一個(gè)好主意,因?yàn)樗锌赡茏屓藗兡軌蛲ㄟ^Web查看您的代碼.這樣安全性不好.? ??
????將代碼放在文檔根目錄之外的某個(gè)目錄中,例如/ home / mycode.
讓我們看看startproject這個(gè)指令都創(chuàng)建了什么:
- 外部的mysite/是你項(xiàng)目的容器.它的名字不影響django;你可以隨你喜歡地修改名字
- manage.py:一個(gè)代碼管理工具,可以讓你用各種方式與django進(jìn)行交互.你可以讀到關(guān)于manage.py的所有功能在django-admin and manage.py
- 內(nèi)部的mysite/是你django項(xiàng)目的實(shí)際文件夾.它的名字是你需要用來導(dǎo)入任何內(nèi)容的Python包名(例如:mysite.urls)
- mysite/__init__.py:一個(gè)空的文件用來告訴python,這個(gè)文件夾是一個(gè)python包.如果你是一個(gè)python初學(xué)者,建議你先了解一下python包的含義
- mysite/setting.py:用于配置django的設(shè)置.通過django settings可以了解到settings的工作方式
- mysite/urls.py:django項(xiàng)目的url管理器,可以設(shè)置你django項(xiàng)目可以訪問的網(wǎng)頁url.通過URL dispatcher可以了解更多關(guān)于URLS
- mysite/wsgi.py:WSGI兼容的Web服務(wù)器為您的項(xiàng)目提供服務(wù)的入口點(diǎn)
---------------------------------------------------------------------------------------------------------------------
開發(fā)服務(wù)器
? ? 讓我們檢驗(yàn)我的django項(xiàng)目.進(jìn)入外部mysite目錄,運(yùn)行下面的指令:
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 11, 2018 - 19:22:09 Django version 2.0.4, using settings 'blogproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.注釋:
????現(xiàn)在請(qǐng)忽略數(shù)據(jù)庫遷移的問題,這個(gè)問題會(huì)在稍后進(jìn)行處理.
? ? 你已經(jīng)開始使用django開發(fā)服務(wù)器了,這是一個(gè)純粹用Python編寫的輕量級(jí)Web服務(wù)器.這些功能我們已經(jīng)在django中包含了,所以你可以很快地進(jìn)行開發(fā),你可以直接進(jìn)行開發(fā),不需要去配置生產(chǎn)服務(wù)器,比如像Apache這樣的網(wǎng)頁服務(wù)器.
? ? 注意注意!不要在類似于生產(chǎn)環(huán)境的任何情況下使用此服務(wù)器。它僅用于開發(fā)時(shí)使用。 (我們的業(yè)務(wù)是制作Web框架,而不是Web服務(wù)器。)????
? ? 現(xiàn)在服務(wù)器正在運(yùn)行,可以通過http://127.0.0.1:8000/來訪問你的網(wǎng)頁,你可以看到"The install worked successfully! Congratulations!",還有一個(gè)起飛的火箭,說明它正在工作.
切換端口:
? ? runserver這個(gè)命令默認(rèn)會(huì)以8000作為端口號(hào)開啟服務(wù)器.
? ? 如果你想要改變服務(wù)器的端口號(hào),將它作為命令的參數(shù)輸入.下面是個(gè)例子,這個(gè)命令開啟服務(wù)器在8080端口上:
python manager.py runserver 8080? ? 你如果你想改變服務(wù)器的IP地址,將ip地址與端口號(hào)一起作為參數(shù)傳遞即可,如果出現(xiàn)錯(cuò)誤,如下
Invalid HTTP_HOST header: '127.1.1.1:8080'. You may need to add '127.1.1.1' to ALLOWED_HOSTS.? ? 說明你需要把該IP加入setting.py文件中ALLOWED_HOSTS中即可.
? ? 如果你想收聽所有可用的公共IP(如果你正在運(yùn)行Vagrant或希望在網(wǎng)絡(luò)上的其他計(jì)算機(jī)上炫耀你的工作,這很有用),請(qǐng)使用:
python manage.py runserver 0:8000 0是0.0.0.0的簡(jiǎn)稱.有關(guān)開發(fā)服務(wù)器的完整文檔可以在runserver參考中找到。????
自動(dòng)重新加載服務(wù)器:
? ??您無需重新啟動(dòng)服務(wù)器以使代碼更改生效。但是,某些操作(如添加文件)不會(huì)觸發(fā)重新啟動(dòng),因此在這種情況下您必須重新啟動(dòng)服務(wù).
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
創(chuàng)建一個(gè)Polls應(yīng)用:
? ? 現(xiàn)在你的服務(wù)器環(huán)境已經(jīng)搭建好了,你可以開始工作了.
? ? 你在django中編寫的每一個(gè)應(yīng)用都遵循特定的python包.?django帶有一個(gè)實(shí)用的工具可以自動(dòng)生成應(yīng)用的基本目錄結(jié)構(gòu),所有你可以把注意力放在寫代碼上而不是創(chuàng)建文件目錄.
項(xiàng)目對(duì)比應(yīng)用:
? ? 項(xiàng)目和應(yīng)用的不用是什么呢?應(yīng)用是網(wǎng)頁應(yīng)用程序,它可以執(zhí)行一些操作,比如公共記錄數(shù)據(jù)庫或者簡(jiǎn)單的投票系統(tǒng).項(xiàng)目是一個(gè)特定網(wǎng)頁配置和網(wǎng)頁應(yīng)用程序的集合,一個(gè)項(xiàng)目可以包含多個(gè)應(yīng)用,一個(gè)應(yīng)用可以在多個(gè)項(xiàng)目中.
? ? 你的所有應(yīng)用可以在你python路徑上的任何地方.在本教程中,我們會(huì)創(chuàng)建Poll應(yīng)用與manage.py文件同一個(gè)路徑下,所以它可以被直接作為主模塊被調(diào)用,而不是作為mysite的子模塊.
? ? 創(chuàng)建你的應(yīng)用,確認(rèn)你已經(jīng)進(jìn)入了與manage.py同目錄下,然后執(zhí)行下面的目錄:
? ? 這個(gè)命令創(chuàng)建了polls文件夾,?其中目錄像下面這樣:
polls/__init__.pyadmin.pyapps.pymigrations/__init__.pymodels.pytests.pyviews.py? ? 這個(gè)文件夾將包含我們的投票系統(tǒng)應(yīng)用.-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
編寫你的第一個(gè)視圖:
? ? 讓我們編寫第一個(gè)視圖.打開polls/views.py這個(gè)文件然后將下面的python代碼寫入:
polls/views.py中? ?? ??
from django.http import HttpResponsedef index(request):return HttpResponse("Hello, world. You're at the polls index.")? ? 這是可能是django中最簡(jiǎn)單的視圖了.要調(diào)用這個(gè)視圖,我們需要將它映射到一個(gè)URL - 為此我們需要一個(gè)URLconf.
? ? 需要?jiǎng)?chuàng)建一個(gè)URLconf在polls文件夾中.創(chuàng)建一個(gè)文件叫做urls.py.你的文件夾現(xiàn)在應(yīng)該是這樣:
? ? 在polls/urls.py文件中加入下面的代碼:
polls/urls.py文件中
from django.urls import pathfrom . import viewsurlpatterns = [path('',views.index, name='index'), ]? ? 下一步是將根的URLconf指向polls.urls模塊.在mysite/urls.py添加導(dǎo)入django.urls.include然后在urlpatterns列表中添加一個(gè)include(),以便導(dǎo)入polls.urls模塊:
mysite/urls.py文件中
from django.contrib import admin from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),path('polls/',include('polls.urls')), ]????include()函數(shù)允許訪問其他的URLconf.任何時(shí)候django碰到include()函數(shù),它會(huì)暫停在這個(gè)URL在當(dāng)前URLconf中的匹配,轉(zhuǎn)而進(jìn)入include函數(shù)中的URLconfs中找尋匹配.
? ? include()函數(shù)的主要想法是讓引用URLs更加方便.因?yàn)橥镀笔窃谧约旱腢RLconf中(polls/urls.py),他們可以被放置在"/polls/"之下,或者"/fun_polls/"之下,或者"/content/polls/"之下,或者其他根目錄之下,這個(gè)應(yīng)用都可以工作.
什么時(shí)候使用include()函數(shù)?
? ? 你應(yīng)該總是使用include()函數(shù)當(dāng)你要添加其他URL模型時(shí).admin.site.urls 是唯一一個(gè)不可以使用的例外.? ? 你現(xiàn)在已經(jīng)將一個(gè)視圖連接到URLconf了,現(xiàn)在驗(yàn)證它是否工作,運(yùn)行下面的指令:
? ? 通過瀏覽器訪問http://localhost:8000/polls/,然后你應(yīng)該可以看到"Hello, world. You’re at the polls index.",這些是你在index中寫下的.
? ? path()函數(shù)會(huì)傳遞四個(gè)參數(shù),其中兩個(gè)是必須的:路徑(route)和視圖(view),兩個(gè)可以可選屬性:kwargs和名字(name).我們需要回顧一下這四個(gè)參數(shù).
路徑(route)
路徑是一個(gè)字符串,包含了URL模型.處理請(qǐng)求時(shí),django從urlpattens第一個(gè)URL開始往下,匹配請(qǐng)求的URL,直到找到一個(gè)匹配的URL.
視圖(view)
當(dāng)django找到匹配的URL模式,它將HttpRequest對(duì)象作為第一個(gè)參數(shù)并將路由中的任何“捕獲”值作為關(guān)鍵字參數(shù)調(diào)用指定的視圖函數(shù).我們將稍微舉一個(gè)例子.
kwargs
關(guān)鍵字參數(shù)可以在字典中傳遞給目標(biāo)視圖,我們不打算在教程中使用Django的這個(gè)特性。名字(name)
命名你的URL可以讓你從django其他地方明確地引用它,特別是在模板中.這個(gè)強(qiáng)大的功能允許你只在單個(gè)文件中對(duì)項(xiàng)目的URL模式進(jìn)行全局修改.
如果你對(duì)基本請(qǐng)求和響應(yīng)流程這一節(jié)感到滿意,請(qǐng)閱讀本教程的第2節(jié)以開始使用數(shù)據(jù)庫。
轉(zhuǎn)載于:https://www.cnblogs.com/GF66/p/9785489.html
總結(jié)
以上是生活随笔為你收集整理的Django的第一步(第一节)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7系统蓝屏修复工具如何使用
- 下一篇: Information worker