Django學(xué)習(xí)筆記(一)

筆記來源:自強學(xué)堂-Django教程
這個教程真的非常好用!強烈推薦

Django簡介-組成部分


  • urls.py:網(wǎng)址入口狠怨,關(guān)聯(lián)到對應(yīng)的views.py中的一個函數(shù)(或者generic類),訪問網(wǎng)址就對應(yīng)一個函數(shù)泼掠。
  • views.py:處理用戶發(fā)出的請求甜滨,從urls.py中對應(yīng)過來材彪,通過渲染templates中的網(wǎng)頁可以將顯示內(nèi)容案怯,比如登錄后的用戶名则拷,用戶請求的數(shù)據(jù),輸出到網(wǎng)頁甩牺。
  • models.py:與數(shù)據(jù)庫操作相關(guān)蘑志,存入或讀取數(shù)據(jù)時用到這個,用不到數(shù)據(jù)庫就不使用
  • forms.py:表單贬派。用戶在瀏覽器上輸入數(shù)據(jù)提交急但,對數(shù)據(jù)的驗證工作以及輸入框的生成等工作,也可以不使用搞乏。
  • templates 文件夾:views.py 中的函數(shù)渲染templates中的html模板波桩,得到動態(tài)內(nèi)容的網(wǎng)頁,也可以用緩存來提高速度查描。
  • admin.py:后臺突委。通過少量代碼就可以擁有一個強大的后臺。
  • settings.py:Django的設(shè)置冬三,配置文件。如DEBUG的開關(guān)缘缚,靜態(tài)文件的位置勾笆。

Django 基本命令


這些命令很重要,盡量記得

  1. 新建一個django project
django-admin.py startproject project-name

一個project為一個項目桥滨,project-name 項目名稱窝爪。

  1. 新建app
#執(zhí)行該命令:新建的app與project處于一個文件project下
django-admin.py startapp app-name 
#執(zhí)行這個命令app在project-name子目錄下
#執(zhí)行這個命令的前提:cd projectname/
python manage.py startapp app-name

一般一個項目有多個app弛车,通用的app可以在多個項目中使用

  1. 同步數(shù)據(jù)庫
#Django 1.7.1以及以上版本需要用一下命令
python manage.py makemigrations
python manage.py migrate

這種犯法可以創(chuàng)建表,當(dāng)在models.py中新增了類是蒲每,運行它可以自動的在數(shù)據(jù)庫中創(chuàng)建表纷跛,不用手動創(chuàng)建。

  1. 使用開發(fā)服務(wù)器
    開發(fā)服務(wù)器:開發(fā)時使用邀杏,只用來測試贫奠,不要用于生產(chǎn)環(huán)境
python manage.py runserver
# 當(dāng)提示端口被占用的時候,可以用其它端口:
python manage.py runserver 8001
python manage.py runserver 9999
(當(dāng)然也可以kill掉占用端口的進程)
# 監(jiān)聽所有可用 ip (電腦可能有一個或多個內(nèi)網(wǎng)ip望蜡,一個或多個外網(wǎng)ip唤崭,即有多個ip地址)
python manage.py runserver 0.0.0.0:8000
# 如果是外網(wǎng)或者局域網(wǎng)電腦上可以用其它電腦查看開發(fā)服務(wù)器
# 訪問對應(yīng)的 ip加端口,比如 http://172.16.20.2:8000
  1. 清空數(shù)據(jù)庫
    該命令執(zhí)行后只留下空表
  2. 創(chuàng)建超級管理員
python manage.py createsuperuser
# 按照提示輸入用戶名和對應(yīng)的密碼就好了郵箱可以留空脖律,用戶名和密碼必填
# 修改 用戶密碼可以用:
python manage.py changepassword username
  1. 導(dǎo)出數(shù)據(jù)
#注意 導(dǎo)出的xxx.json文件位于 projectname文件夾下
python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json
  1. Django 項目環(huán)境終端
python mange.py shell

如果你安裝了 bpython 或 ipython 會自動用它們的界面谢肾,推薦安裝 bpython。
這個命令和 直接運行 python 或 bpython 進入 shell 的區(qū)別是:你可以在這個 shell 里面調(diào)用當(dāng)前項目的 models.py 中的 API小泉,對于操作數(shù)據(jù)芦疏,還有一些小測試非常方便。

  1. 數(shù)據(jù)庫命令行
python manage.py dbshell

在這個終端可以執(zhí)行數(shù)據(jù)庫的SQL語句

  1. 更多命令
python manage.py

可以看到詳細列表微姊,忘記命令時很好用

Django 視圖與網(wǎng)址


  1. 新建一個項目的基本步驟
#1. 新建一個項目(project), 名稱為 mysite
django-admin.py startproject mysite
#2. 新建一個應(yīng)用(app), 名稱叫 learn
#到外層那個 mysite 目錄下(不是mysite中的mysite目錄)
python manage.py startapp learn
#**把我們新定義的app加到settings.py中的****INSTALL_APPS****中**
#修改 mysite/mysite/settings.py
#如果不添加這一步酸茴,django 就不能自動找到app中的模板文件和靜態(tài)文件
#3. 定義視圖函數(shù)(訪問頁面的內(nèi)容)
#在views.py中修改 注意:coding:utf-8
#4. 定義視圖函數(shù)相關(guān)的URL(網(wǎng)址)
# mysite/mysite/urls.py
#5. 運行服務(wù)器
python manage.py runserver
  1. 其他功能
  • 在網(wǎng)頁上做加減法
    1. 采用 **/add/?a=4&b=5 **這樣GET方法進行
#views.py
from django.shortcuts import render
from django.http import HttpResponse
def add(request):
      a = request.GET['a']
      b = request.GET['b']
      c = int(a)+int(b)
      return HttpResponse(str(c))
#注:request.GET 類似于一個字典,更好的辦法是用 request.GET.get('a', 0) 當(dāng)沒有傳遞 a 的時候默認 a 為 0
#urls.py
from calc import views as calc_views
url(r'^add/', calc_views.add, name='add'),  # 注意修改了這一行
#訪問http://127.0.0.1:8000/add/?a=4&b=5
2. 采用/add/3/4/這樣的網(wǎng)址方式
#views.py
def add2(request,a,b):
      c = int(a)+int(b)
      return HttpResponse(str(c))
#urls.py
url(r'^add/(\d+)/(\d+)/$',calc_views.add2,name='add2')
#訪問
http://127.0.0.1:8000/add/4/5/
  • url中name的作用
    當(dāng)網(wǎng)址發(fā)生改變的時候柒桑,訪問能夠依然有效
不帶參數(shù)的:
{% url 'name' %}
帶參數(shù)的:參數(shù)可以是變量名
{% url 'name' 參數(shù) %}
例如:
<a href="{% url 'add2' 4 5 %}">link</a>

上述代碼渲染成的最終的頁面是:

<a href = "/add2/4/5">link</a>
#這樣就可以通過 {% url 'add2' 4 5 %} 獲取到對應(yīng)的網(wǎng)址 /add2/4/5/

注意:注意看重點 add2 變成了 new_add弊决,但是后面的 name='add2' 沒改,這時 {% url 'add2' 4 5 %} 就會渲染對應(yīng)的網(wǎng)址成 /new_add/4/5/
reverse 函數(shù)也是一樣魁淳,獲取的時候會跟著變成新的網(wǎng)址
讓以前的就網(wǎng)址自動跳轉(zhuǎn)到新的網(wǎng)址:

#views.py
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
def old_add2_redirect(request, a, b):
    return HttpResponseRedirect(
        reverse('add2', args=(a, b))
    )
#urls.py
url(r'^add2/(\d+)/(\d+)/$', calc_views.old_add2_redirect),
url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),

Django 模板


之前都是通過簡單的django.http.HttpResponse把內(nèi)容顯示到網(wǎng)頁上飘诗,現(xiàn)在可以通過渲染模板的方式來顯示內(nèi)容。

  1. 基本步驟
#1.創(chuàng)建項目和應(yīng)用
django-admin.py startproject projectname
cd projectname
python manage.py startapp appname
#2.把應(yīng)用加入到settings.py INSTALLED_APPS當(dāng)中
#3.在appname/views.py 當(dāng)中寫一個首頁的視圖
from django.shortcuts import render
def home(request):
        home render(request,'home.html')
#4. 在appname下新建templates文件夾界逛,里面新建一個home.html
#默認配置下django會自動找到app下面的templates文件夾中的模板文件
#5. 修改home.html
#6. 將視圖函數(shù)對應(yīng)到網(wǎng)址昆稿,更改projectname/urls.py
from appname import views as appname_views
urlpatterns = [
      url(r'^$',appname_views.home,name='home'),
]
#7.創(chuàng)建數(shù)據(jù)庫表
python manage.py migrate
#8.運行開發(fā)服務(wù)器
python manage.py runserver

注意幾點:

  • Django 查找模板的過程是在每個 app 的 templates 文件夾中找(而不只是當(dāng)前 app 中的代碼只在當(dāng)前的 app 的 templates 文件夾中找)。各個 app 的 templates 形成一個文件夾列表息拜,Django 遍歷這個列表溉潭,一個個文件夾進行查找,當(dāng)在某一個文件夾找到的時候就停止少欺,所有的都遍歷完了還找不到指定的模板的時候就是 Template Not Found (過程類似于Python找包)喳瓣。
  • 模板命名規(guī)則:僅和該app相關(guān)的模板放在 app/templates/app/
  1. 循環(huán)、條件判斷赞别、常用標簽畏陕、過濾器的使用
  • 顯示一個基本的字符串在網(wǎng)頁上
#views.py
def home(request):
        string = u'Hello world!'
        return render(request,'home.html',{'string':string})
#home.html
{{ string }}
  • 基本for循環(huán)和List內(nèi)容的顯示
  • 顯示字典內(nèi)容
  • for循環(huán)和if條件操作
  • 模板中的邏輯操作
  • 獲取當(dāng)前網(wǎng)址、當(dāng)前用戶
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仿滔,一起剝皮案震驚了整個濱河市惠毁,隨后出現(xiàn)的幾起案子犹芹,更是在濱河造成了極大的恐慌,老刑警劉巖鞠绰,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腰埂,死亡現(xiàn)場離奇詭異,居然都是意外死亡蜈膨,警方通過查閱死者的電腦和手機屿笼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丈挟,“玉大人刁卜,你說我怎么就攤上這事∈镅剩” “怎么了蛔趴?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長例朱。 經(jīng)常有香客問我孝情,道長,這世上最難降的妖魔是什么洒嗤? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任箫荡,我火速辦了婚禮,結(jié)果婚禮上渔隶,老公的妹妹穿的比我還像新娘羔挡。我一直安慰自己,他們只是感情好间唉,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布绞灼。 她就那樣靜靜地躺著,像睡著了一般呈野。 火紅的嫁衣襯著肌膚如雪低矮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天被冒,我揣著相機與錄音军掂,去河邊找鬼。 笑死昨悼,一個胖子當(dāng)著我的面吹牛蝗锥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播率触,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼玛追,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了闲延?” 一聲冷哼從身側(cè)響起痊剖,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎垒玲,沒想到半個月后陆馁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡合愈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年叮贩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佛析。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡益老,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出寸莫,到底是詐尸還是另有隱情捺萌,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布膘茎,位于F島的核電站桃纯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏披坏。R本人自食惡果不足惜态坦,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棒拂。 院中可真熱鬧伞梯,春花似錦、人聲如沸帚屉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涮阔。三九已至猜绣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敬特,已是汗流浹背掰邢。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伟阔,地道東北人辣之。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像皱炉,于是被迫代替她去往敵國和親怀估。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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