筆記來源:自強學(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 基本命令
這些命令很重要,盡量記得
- 新建一個django project
django-admin.py startproject project-name
一個project為一個項目桥滨,project-name 項目名稱窝爪。
- 新建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可以在多個項目中使用
- 同步數(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)建。
-
使用開發(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
- 清空數(shù)據(jù)庫
該命令執(zhí)行后只留下空表 - 創(chuàng)建超級管理員
python manage.py createsuperuser
# 按照提示輸入用戶名和對應(yīng)的密碼就好了郵箱可以留空脖律,用戶名和密碼必填
# 修改 用戶密碼可以用:
python manage.py changepassword username
- 導(dǎo)出數(shù)據(jù)
#注意 導(dǎo)出的xxx.json文件位于 projectname文件夾下
python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json
- Django 項目環(huán)境終端
python mange.py shell
如果你安裝了 bpython 或 ipython 會自動用它們的界面谢肾,推薦安裝 bpython。
這個命令和 直接運行 python 或 bpython 進入 shell 的區(qū)別是:你可以在這個 shell 里面調(diào)用當(dāng)前項目的 models.py 中的 API小泉,對于操作數(shù)據(jù)芦疏,還有一些小測試非常方便。
- 數(shù)據(jù)庫命令行
python manage.py dbshell
在這個終端可以執(zhí)行數(shù)據(jù)庫的SQL語句
- 更多命令
python manage.py
可以看到詳細列表微姊,忘記命令時很好用
Django 視圖與網(wǎng)址
- 新建一個項目的基本步驟
#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
- 其他功能
- 在網(wǎng)頁上做加減法
- 采用 **/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.創(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/
- 循環(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)前用戶