網(wǎng)民原創(chuàng)
Python DJango手冊(cè)
環(huán)境搭建 項(xiàng)目創(chuàng)建 項(xiàng)目配置 應(yīng)用創(chuàng)建 數(shù)據(jù)訪問(wèn) 數(shù)據(jù)編輯
網(wǎng)民
2011/9/22
目錄
1.
環(huán)境 .......................................................................................................................................... 3 1.1.
安裝Python........................................................................................................................... 3
說(shuō)明 .................................................................................................................................. 3 安裝 .................................................................................................................................. 3 驗(yàn)證 .................................................................................................................................. 3 卸載 .................................................................................................................................. 4
1.1.1. 1.1.2. 1.1.3. 1.1.4. 1.2.
安裝DJango .......................................................................................................................... 5
說(shuō)明 .................................................................................................................................. 5 安裝 .................................................................................................................................. 5 驗(yàn)證 .................................................................................................................................. 5 卸載 .................................................................................................................................. 6
1.2.1. 1.2.2. 1.2.3. 1.2.4. 2.
起步 .......................................................................................................................................... 7 2.1.
項(xiàng)目 ....................................................................................................................................... 7
創(chuàng)建項(xiàng)目 .......................................................................................................................... 7 運(yùn)行項(xiàng)目 .......................................................................................................................... 7
2.1.1. 2.1.2. 2.2.
后臺(tái) ....................................................................................................................................... 8
說(shuō)明 .................................................................................................................................. 8 引用庫(kù) .............................................................................................................................. 8 Sqlite3數(shù)據(jù)庫(kù) .................................................................................................................. 8 URL .................................................................................................................................... 9
2.2.1. 2.2.2. 2.2.3. 2.2.4. 2.3.
模塊 ..................................................................................................................................... 10
創(chuàng)建模塊 ........................................................................................................................ 10 創(chuàng)建數(shù)據(jù) ........................................................................................................................ 10 添加數(shù)據(jù) ........................................................................................................................ 11
1 / 18
2.3.1. 2.3.2. 2.3.3.
2.3.4. 2.3.5. 2.3.6.
創(chuàng)建頁(yè)面 ........................................................................................................................ 12 創(chuàng)建映射 ........................................................................................................................ 12 配置映射 ........................................................................................................................ 12
模塊MVC .............................................................................................................. 13 項(xiàng)目MVC .............................................................................................................. 13
2.3.6.1. 2.3.6.2. 2.3.7.
訪問(wèn)數(shù)據(jù) ........................................................................................................................ 14
模塊C ................................................................................................................... 14 模塊V ................................................................................................................... 14 項(xiàng)目C ................................................................................................................... 15
2.3.7.1. 2.3.7.2. 2.3.7.3. 2.3.8.
編輯數(shù)據(jù) ........................................................................................................................ 16
模塊V ................................................................................................................... 16 模塊C ................................................................................................................... 16
2.3.8.1. 2.3.8.2.
2 / 18
1. 環(huán)境
1.1. 安裝Python 1.1.1. 說(shuō)明
python安裝文件可從http://www.python.org下載; 例如python-2.7.2.msi;
1.1.2. 安裝
1) 運(yùn)行python安裝文件,例如“python-2.7.2.msi”;
2) 建議安裝路徑:.\\\\PythonServer\\\\PythonXXX;例如,python的版本是
2.7.2,則安裝路徑為“.\\\\PythonServer\\\\Python272”,這樣其他python相關(guān)的安裝程序都可以放到.\\\\PythonServer下,且能看清python版本; 3) 增加系統(tǒng)環(huán)境變量,在path內(nèi)增加python根目錄路徑,例如
“D:\\\\PythonServer\\\\Python272”;
1.1.3. 驗(yàn)證
1) 進(jìn)入WINDOWS命令行界面;
2) 輸入“python”,則進(jìn)入python的命令行,可以看到python的版本信息
和命令符;
3) 輸入python代碼,例如“ print ‘pyton is ok’”,會(huì)看到python打印出
一行“python is ok”,說(shuō)明python安裝成功;
4) 退出python命令行,輸入“exit()”或按下“Ctrl+Z”皆可;
3 / 18
1.1.4. 卸載
1) 開(kāi)始菜單->所有程序->python->卸載即可; 2) 如果添加過(guò)操作系統(tǒng)環(huán)境變量,則手動(dòng)刪去;
4 / 18
1.2. 安裝DJango 1.2.1. 說(shuō)明
DJango框架安裝文件可從http://www.djangoproject.com下載; 例如Django-1.3.tar.gz;
1.2.2. 安裝
1) 解壓Django-1.3.tar.gz;任何路徑皆可;例如“D:\\\\Django-1.3”; 2) 解壓后的文件夾里可以看到有一個(gè)文件“setup.py”; 3) 進(jìn)入WINDOWS命令行界面,輸入“cd D:\\\\Django-1.3”; 4) 運(yùn)行命令“python setup.py install”; 5) 自動(dòng)安裝完畢;
6) 增加環(huán)境變量,在path內(nèi)添加django的根目錄路徑,例如:
“D:\\PythonServer\\Python272\\Lib\\site-packages\\django”以及 “D:\\PythonServer\\Python272\\Lib\\site-packages\\django\\bin”;
1.2.3. 驗(yàn)證
1) 進(jìn)入WINDOWS命令行界面; 2) 輸入“python”進(jìn)入python命令行; 3) 輸入python命令
>>import django
>>print django.VERSION
如果打印出DJango的版本信息,例如“(1, 3, 0, 'final', 0)”,說(shuō)明安裝成功;
5 / 18
1.2.4. 卸載
1) 找到python安裝目錄下的子目錄,
例如“D:\\PythonServer\\Python272\\Lib\\site-packages”;
2) 可以看到有一個(gè)“django”文件夾和“Django-1.3-py2.7.egg-info”文
件,將該文件和該文件刪除即可完成卸載; 3) 如果添加過(guò)操作系統(tǒng)環(huán)境變量,則手動(dòng)刪去;
6 / 18
2. 起步
2.1. 項(xiàng)目 2.1.1. 創(chuàng)建項(xiàng)目
1) 打開(kāi)操作系統(tǒng)命令行界面;
2) 創(chuàng)建項(xiàng)目的django命令為“django-admin.pyc”; 3) 參數(shù)示例:
django-admin.pyc startproject FirstDJProject 表示工程目錄為“FirstDJProject”;
4) 注意,當(dāng)前系統(tǒng)命令行的位置即為項(xiàng)目路徑,因此,需提前在命令行里定位
到要存放項(xiàng)目的路徑,再進(jìn)行項(xiàng)目創(chuàng)建; 5) 創(chuàng)建好項(xiàng)目后,項(xiàng)目路下有N個(gè)文件;
2.1.2. 運(yùn)行項(xiàng)目
1) 在系統(tǒng)命令行界面下定位到項(xiàng)目路徑;
2) 項(xiàng)目路徑下的manage.py即為該項(xiàng)目的管理文件;關(guān)于該項(xiàng)目的很多功能
都通過(guò)該管理文件來(lái)啟動(dòng);
3) 輸入“python manage.py runserver”即刻啟動(dòng)django自帶的可作為
開(kāi)發(fā)調(diào)試用的WEB服務(wù)器; 4) 看到提示
“Development server is running at http://127.0.0.1:8000/” 表示項(xiàng)目后臺(tái)已經(jīng)開(kāi)始運(yùn)行;
5) 打開(kāi)瀏覽器里,輸入http://127.0.0.1:8000/,看到“It worked!”提示,
表示項(xiàng)目搭建成功;
7 / 18
2.2. 后臺(tái) 2.2.1. 說(shuō)明
django自帶一個(gè)后臺(tái)管理界面,但是,在訪問(wèn)后臺(tái)管理界面前,需要先進(jìn)行如下配置: 1) 配置引用庫(kù); 2) 配置數(shù)據(jù)庫(kù); 3) 配置URL;
如果使用sqlite3數(shù)據(jù)庫(kù),不需要任何其他的安裝,因?yàn)閺腜ython2.5開(kāi)始,sqlite3就已經(jīng)是python的標(biāo)準(zhǔn)模塊,這也是pyton中一個(gè)唯一的數(shù)據(jù)庫(kù)接口類模塊;如果使用其他數(shù)據(jù)庫(kù)例如mysql,則需要進(jìn)行相應(yīng)的安裝;后續(xù)的示例使用sqlite3數(shù)據(jù)庫(kù);
2.2.2. 引用庫(kù)
1) 打開(kāi)項(xiàng)目下的settings.py文件; 2) 找到INSTALLED_APPS配置;
3) 增加引用庫(kù)’django.contrib.admin’;配置文件中已存在,只需去掉注釋; 4) 該文件里一般默認(rèn)都引用了auth、contenttypes、sessions、sites等庫(kù);
2.2.3. Sqlite3數(shù)據(jù)庫(kù)
1) 打開(kāi)項(xiàng)目下的settings.py文件; 2) 找到DATABASES配置;
3) 配置ENGINE為“django.db.backends.sqlite3”;配置文件中原有
“django.db.backends.”,只需增加對(duì)應(yīng)的數(shù)據(jù)庫(kù)名; 4) 配置NAME為sqlite3數(shù)據(jù)庫(kù)存放路徑和名稱,例如
D:\\PythonServer\\StudyPython\\FirstProject\\MySqlite3.db;
8 / 18
5) 運(yùn)行命令“python manage.py syncdb”,即自動(dòng)創(chuàng)建后臺(tái)所需的數(shù)據(jù)庫(kù),
同時(shí)會(huì)提示需要?jiǎng)?chuàng)建賬戶,可輸入yes來(lái)創(chuàng)建,也可輸入no,自己手動(dòng)創(chuàng)建;命令執(zhí)行完畢后,可以找到NAME配置的數(shù)據(jù)庫(kù)文件;
6) 如果手動(dòng)創(chuàng)建賬戶,則運(yùn)行命令“python manage.py createsuperuser”;
2.2.4. URL
1) 打開(kāi)項(xiàng)目下的urls.py文件; 2) 輸入代碼
from django.contrib import admin admin.autodiscover()
配置文件中已存在該代碼,只需去掉注釋即可; 3) 找到配置項(xiàng)urlpatterns,增加如下配置
url(r'^admin/', include(admin.site.urls)), 配置文件中已存在該代碼,只需去掉注釋即可;
4) 輸入“python manage.py runserver”啟動(dòng)項(xiàng)目服務(wù)器;
5) 在瀏覽器中打開(kāi)“http://127.0.0.1:8000/admin/”,即可看到后臺(tái)管理
界面,需要輸入之前創(chuàng)建的賬戶才能進(jìn)入管理;
9 / 18
2.3. 模塊 2.3.1. 創(chuàng)建模塊
目前的項(xiàng)目中還沒(méi)有任何自己的應(yīng)用模塊,全是框架自動(dòng)生成的東西; 可以創(chuàng)建自己的應(yīng)用模塊,在模塊內(nèi)創(chuàng)建數(shù)據(jù)表,并添加自己的頁(yè)面; 1) 輸入命令“python manage.py startapp xxx”,其中xxx是模塊的名稱,
例如:python manage.py startapp art
2) 此時(shí)在項(xiàng)目路徑下多了一個(gè)名稱為art的文件夾,該文件夾內(nèi)保存的是與該
模塊相關(guān)的文件;
3) 打開(kāi)項(xiàng)目下的settings.py文件,找到INSTALLED_APPS配置; 4) 增加針對(duì)該模塊的引用’FirstProject.art’;
2.3.2. 創(chuàng)建數(shù)據(jù)
1) 打開(kāi)模塊目錄下的models.py文件,該文件是MVC中的M,負(fù)責(zé)應(yīng)用的
數(shù)據(jù)結(jié)構(gòu);
2) 文件中原有一句“from django.db import models”,現(xiàn)增加如下代碼:
class TB1(models.Model):
content = models.CharField(max_length = 500) submit_date = models.DateTimeField(‘a(chǎn)uto_now_add’)
表示要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)表,而該數(shù)據(jù)表的訪問(wèn)類名為TB1;以此方式可以創(chuàng)建多個(gè)數(shù)據(jù)表;
3) 輸入命令“python manage.py sql art”,可以查看自動(dòng)生成的針對(duì)art
模塊下的所有數(shù)據(jù)表的sql創(chuàng)建代碼,例如: BEGIN;
CREATE TABLE \"art_tb1\" (
\"id\" integer NOT NULL PRIMARY KEY, \"content\" varchar(500) NOT NULL,
10 / 18
);
\"submit_date\" datetime NOT NULL
CREATE TABLE \"art_tb2\" ( ); COMMIT;
從該段代碼可看出,數(shù)據(jù)表屬于art模塊,名稱為art_tb1,針對(duì)該數(shù)據(jù)表的操作MODEL名稱為TB1;
4) 運(yùn)行命令“python manage.py syncdb”則自動(dòng)創(chuàng)建出數(shù)據(jù)表;
\"id\" integer NOT NULL PRIMARY KEY, \"content\" varchar(100) NOT NULL, \"submit_date\" datetime NOT NULL
2.3.3. 添加數(shù)據(jù)
1) 在系統(tǒng)命令行模式下,定位到項(xiàng)目路徑;
2) 輸入命令“python manage.py shell”進(jìn)入專門針對(duì)該項(xiàng)目的命令行模式; 3) 輸入如下代碼來(lái)添加數(shù)據(jù):
>>from art.models import TB1
//從art模塊導(dǎo)入TB1 MODEL //導(dǎo)入框架的datetime //objects表示數(shù)據(jù)表里的行 //content字段
>>from datetime import datetime >>Art.objects.create(
content = ‘MyContent1’,
submit_date=datetime.now()) //submit_date字段
//以此方式添加多條數(shù)據(jù)
>>…
4) 接著可使用如下的代碼簡(jiǎn)單的獲取到數(shù)據(jù)表內(nèi)的數(shù)據(jù):
>>all_line = TB1.objects.all() >>print all_line[1].content
//獲得TB1的所有行 //打印第一行的content字段
11 / 18
2.3.4. 創(chuàng)建頁(yè)面
1) 頁(yè)面一般統(tǒng)一放在ProjectPath\\Templates目錄下;Templates是較常用
的名稱,也可自行更改;
2) 在Templates下,針對(duì)應(yīng)用模塊的名稱再單獨(dú)創(chuàng)建子目錄;
3) 例如“ProjectPath\\Templates\\art”表示該目錄下存放的是針對(duì)art模塊
的頁(yè)面;
4) 這些頁(yè)面就是MVC中的V,負(fù)責(zé)應(yīng)用的視圖;
5) 在“ProjectPath\\Templates\\art”下創(chuàng)建一個(gè)最簡(jiǎn)單的靜態(tài)的html頁(yè)面,
但注意html文件的編碼方式需要為utf8;
2.3.5. 創(chuàng)建映射
1) 打開(kāi)模塊目錄下的views.py文件,該文件是MVC中的C,負(fù)責(zé)應(yīng)用的邏
輯處理; 2) 寫入如下代碼:
from django.shortcuts import render_to_response def MyFirstView(rq):
return render_to_response('art/Static1.html')
3) 函數(shù)MyFirstView只做一件事情,就是把頁(yè)面跳轉(zhuǎn)到art目錄下的
Static1.html;注意,該路徑用的是相對(duì)路徑,也就是會(huì)在Templates目錄下尋找“art/Static1.html”,之所以能到Templates目錄下尋找,就是后續(xù)的配置映射做到的;
2.3.6. 配置映射
在一個(gè)項(xiàng)目?jī)?nèi)創(chuàng)建模塊,并使用該模塊,全部步驟可以分為兩個(gè)部分:模塊MVC和項(xiàng)目MVC;
12 / 18
2.3.6.1. 模塊MVC
按照之前的描述,在項(xiàng)目?jī)?nèi)創(chuàng)建一個(gè)模塊時(shí),按照MVC的思路分為三個(gè)步驟: 1) M:即創(chuàng)建模塊并在模塊的models.py中創(chuàng)建數(shù)據(jù);
2) V:即在“項(xiàng)目\\Templates\\模塊”目錄下創(chuàng)建該模塊對(duì)應(yīng)的各個(gè)頁(yè)面; 3) C:即在模塊的views.py中創(chuàng)建各個(gè)邏輯控制函數(shù);
2.3.6.2. 項(xiàng)目MVC
在完成一個(gè)模塊的MVC之后,還需要在項(xiàng)目級(jí)別按照MVC的思路進(jìn)行配置: 1) M:打開(kāi)項(xiàng)目下的settings.py文件,找到INSTALLED_APPS配置;增加
針對(duì)該模塊的引用’FirstProject.art’;
2) V:打開(kāi)項(xiàng)目下的settings.py文件,找到TEMPLATE_DIRS配置;寫入
模版路徑:
TEMPLATE_DIRS = (
'Templates')
因此,編寫控制函數(shù)時(shí),如下的代碼使得系統(tǒng)在Templates內(nèi)尋找相應(yīng)文件:return render_to_response('art/Static1.html');
3) C:打開(kāi)項(xiàng)目下的urls.py文件;找到配置項(xiàng)urlpatterns,增加配置:
url(r'^test/', 'FirstProject.art.views.MyFirstView')或者 url(r'^test/', 'art.views.MyFirstView'); 4) 完成了模塊MVC和項(xiàng)目MVC配置后,
在瀏覽器中打開(kāi)“http://127.0.0.1:8000/test/”, 即可看到art/Static1.html頁(yè)面;
13 / 18
2.3.7. 訪問(wèn)數(shù)據(jù)
2.3.7.1. 模塊C
創(chuàng)建一個(gè)模塊的控制器,用來(lái)生成頁(yè)面數(shù)據(jù)以供頁(yè)面顯示; 打開(kāi)模塊目錄下的views.py文件,添加函數(shù)如下: #引入MODEL TB1來(lái)訪問(wèn)數(shù)據(jù)表art_tb1 from FirstProject.art.models import TB1 #定義函數(shù)MyDataView def MyDataView(rq): #獲取數(shù)據(jù)表內(nèi)的所有行 data_all_lines = TB1.objects.all() #將數(shù)據(jù)返回給頁(yè)面 return render_to_response( #將跳轉(zhuǎn)到該頁(yè)面 'art/DataView.html', #’all_lines’是頁(yè)面內(nèi)訪問(wèn)數(shù)據(jù)使用的名稱 #data_all_lines是該函數(shù)內(nèi)的變量 {'all_lines':data_all_lines} ) 注意:
1) 該控制器返回給頁(yè)面使用的數(shù)據(jù)類型是一個(gè)列表,名稱為’all_lines’; 2) 在一個(gè)函數(shù)內(nèi),一定要注意縮進(jìn)方式,如果用空格縮進(jìn),則所有行都只能用
空格來(lái)縮進(jìn),如果用TAB縮進(jìn),則所有行都只能用TAB來(lái)縮進(jìn),否則會(huì)報(bào)告IndentationError錯(cuò)誤;
2.3.7.2. 模塊V
在對(duì)應(yīng)的模塊頁(yè)面目錄下創(chuàng)建一個(gè)UTF8編碼的DataView.html文件,用來(lái)顯示模塊控制器所生成的數(shù)據(jù):
{% if all_lines %} 數(shù)據(jù)內(nèi)容如下:1) 打開(kāi)項(xiàng)目下的urls.py文件; 2) 找到配置項(xiàng)urlpatterns,增加配置:
url(r'^viewdata/', 'art.views.MyDataView'),
3) 打開(kāi)瀏覽器訪問(wèn)http://127.0.0.1:8000/viewdata/;則可以看到頁(yè)面顯
示出目前的art_tb1數(shù)據(jù)表內(nèi)的每一行的content內(nèi)容;
15 / 18
2.3.8. 編輯數(shù)據(jù)
為了實(shí)現(xiàn)編輯數(shù)據(jù)的功能,可以在之前“訪問(wèn)數(shù)據(jù)”的基礎(chǔ)上進(jìn)行升級(jí),只需要升級(jí)模塊V和模塊C即可;
2.3.8.1. 模塊V
在原DataView.html文件的基礎(chǔ)上,增加一個(gè)form,包含一個(gè)編輯框來(lái)提交數(shù)據(jù):
1) 聲明該form的”method”是get還是post,從而在模塊C中可以用request對(duì)象里的POST或GET屬性來(lái)完成表單元素訪問(wèn);
2) 該form的”action”配置表明,按下提交按鈕后,瀏覽器將訪問(wèn)
http://127.0.0.1:8000/viewdata/;
3) 由此可見(jiàn),對(duì)于頁(yè)面(模塊V)來(lái)說(shuō),永遠(yuǎn)只考慮“發(fā)送請(qǐng)求給某個(gè)URL”,
而具體該URL由哪個(gè)控制器(模塊C)來(lái)處理,是由配置來(lái)決定的; 4) 有一個(gè)輸入框,name為”new_content”表明在模塊C中可以通過(guò)
request.POST.new_content來(lái)訪問(wèn)該元素;
5) 該頁(yè)面目前的功能為:首先顯示模塊C生成的數(shù)據(jù),其次可以提交用戶所輸
入的新的content值;
2.3.8.2. 模塊C
根據(jù)目前模塊V的升級(jí),http://127.0.0.1:8000/viewdata/的請(qǐng)求到來(lái)時(shí)有兩種情況,但這兩種情況都配置給同一個(gè)模塊C的函數(shù)“MyDataView”: 1) 沒(méi)有請(qǐng)求數(shù)據(jù),即POST中沒(méi)有數(shù)據(jù);
2) 有請(qǐng)求數(shù)據(jù),即POST中包含一個(gè)新的content值;
16 / 18
因此,在原views.py文件的“MyDataView”函數(shù)基礎(chǔ)上進(jìn)行升級(jí): #因?yàn)楦鶕?jù)content字段要?jiǎng)?chuàng)建新的一行數(shù)據(jù)內(nèi)容, #因此需要自動(dòng)生成date_time字段,故需要引入該庫(kù) from datetime import datetime #修改該控制函數(shù) def MyDataView(rq): #函數(shù)入口處需要先判斷是否有new_content字段: if rq.POST.has_key('new_content'): #根據(jù)新字段在數(shù)據(jù)表中增加一行數(shù)據(jù) TB1.objects.create( #content字段即為用戶輸入的內(nèi)容 content = rq.POST['new_content'], #submit_date字段由代碼生成 submit_date=datetime.now()) ……原來(lái)的代碼不變 此時(shí)再訪問(wèn)http://127.0.0.1:8000/viewdata/,可以看到: 1) 頁(yè)面首先顯示目前art_tb1數(shù)據(jù)表中的所有數(shù)據(jù);
2) 接著顯示一個(gè)輸入框,可以輸入新的content數(shù)據(jù)并提交;
3) 提交數(shù)據(jù)后,頁(yè)面刷新,再次顯示目前art_tb1數(shù)據(jù)表中的所有數(shù)據(jù),可看
到剛輸入的新的content內(nèi)容已經(jīng)被加入到數(shù)據(jù)表中;
4) 如果報(bào)告403錯(cuò)誤,則在項(xiàng)目配置文件settings.py中保證引用了如下兩
個(gè)模塊:
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfResponseMiddleware'
17 / 18
因篇幅問(wèn)題不能全部顯示,請(qǐng)點(diǎn)此查看更多更全內(nèi)容
Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號(hào)-2
違法及侵權(quán)請(qǐng)聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市萬(wàn)商天勤律師事務(wù)所王興未律師提供法律服務(wù)