1.1.1. 说明
python安装文件可从http://www.python.org下载;
例如python-2.7.3.msi;
1.1.2. 安装
1) 运行python安装文件,例如“python-2.7.3.msi”;
2) 建议安装路径:.\\PythonServer\\PythonXXX;例如,python的版本是2.7.2,则安装路径为“.\\PythonServer\\Python272”,这样其他python相关的安装程序都可以放到.\\PythonServer下,且能看清python版本;
3) 增加系统环境变量,在path内增加python根目录路径,例如“D:\\PythonServer\\Python27”;
1.1.3. 验证
1) 进入WINDOWS命令行界面;
2) 输入“python”,则进入python的命令行,可以看到python的版本信息和命令符;
3) 输入python代码,例如“ print ‘pyton is ok’ ”,会看到python打印出一行“python is ok”,说明python安装成功;
4) 退出python命令行,输入“exit()”或按下“Ctrl+Z”皆可;
1.1.4. 卸载
1) 开始菜单->所有程序->python->卸载 即可;
2) 如果添加过操作系统环境变量,则手动删去;
1.2.1. 说明
DJango框架安装文件可从http://www.djangoproject.com下载;
例如Django-1.4.2.tar.gz;
1.2.2. 安装
1) 解压Django-1.4.2.tar.gz;任何路径皆可;例如“D:\\ Django”;
2) 解压后的文件夹里可以看到有一个文件“setup.py”;
3) 进入WINDOWS命令行界面,输入“cd D:\\ Django”;
4) 运行命令“python setup.pyinstall”;
5) 自动安装完毕;
6) 增加环境变量,在path内添加django的根目录路径,例如:
“D:\PythonServer\Python27\Lib\site-packages\django”以及
“D:\PythonServer\Python27\Lib\site-packages\django\bin”;
1.2.3. 验证
1) 进入WINDOWS命令行界面;
2) 输入“python”进入python命令行;
3) 输入python命令
>>import django
>>print django.VERSION
如果打印出DJango的版本信息,
例如“(1, 4, 0, 'final', 0)”,说明安装成功;
1.2.4. 卸载
1) 找到python安装目录下的子目录,
例如“D:\PythonServer\Python27\Lib\site-packages”;
2) 可以看到有一个“django”文件夹和“Django-1.4-py2.7.egg-info”文件,将该文件和该文件删除即可完成卸载;
3) 如果添加过操作系统环境变量,则手动删去;
2.1.1. 创建项目
1) 打开操作系统命令行界面;
2) 创建项目的django命令为“django-admin.py”;
3) 参数示例:
python django-admin.pystartproject First
表示工程目录为“First”;
4) 注意,当前系统命令行的位置即为项目路径,因此,需提前在命令行里定位到要存放项目的路径,再进行项目创建;
5) 创建好项目后,项目路下有N个文件;
2.1.2. 运行项目
1) 在系统命令行界面下定位到项目路径;
2) 项目路径下的manage.py即为该项目的管理文件;关于该项目的很多功能都通过该管理文件来启动;
3) 输入“python manage.pyrunserver”即刻启动django自带的可作为开发调试用的WEB服务器;
4) 看到提示
“Development server is running at http://127.0.0.1:8000/”
表示项目后台已经开始运行;
5) 打开浏览器里,输入http://127.0.0.1:8000/,看到“It worked!”提示,表示项目搭建成功;
2.2.1. 说明
django自带一个后台管理界面,但是,在访问后台管理界面前,需要先进行如下配置:
1) 配置引用库;
2) 配置数据库;
3) 配置URL;
如果使用sqlite3数据库,不需要任何其他的安装,因为从Python2.5开始,sqlite3就已经是python的标准模块,这也是pyton中一个唯一的数据库接口类模块;如果使用其他数据库例如mysql,则需要进行相应的安装;后续的示例使用sqlite3数据库;
2.2.2. 引用库
1) 打开项目下的settings.py文件;
2) 找到INSTALLED_APPS配置;
3) 增加引用库’django.contrib.admin’;配置文件中已存在,只需去掉注释;
4) 该文件里一般默认都引用了auth、contenttypes、sessions、sites等库;
2.2.3. Sqlite3数据库
1) 打开项目下的settings.py文件;
2) 找到DATABASES配置;
3) 配置
‘ENGINE’:’django.db.backends.sqlite3’;配置文件中原有“django.db.backends.”,只需增加对应的数据库名;
4) 配置NAME为sqlite3数据库存放路径和名称,例如
D: /First\MySqlite3.db;
5) 运行命令“python manage.pysyncdb”,即自动创建后台所需的数据库,同时会提示需要创建账户,可输入yes来创建,也可输入no,自己手动创建;命令执行完毕后,可以找到NAME配置的数据库文件;
6) 如果手动创建账户,则运行命令“pythonmanage.py createsuperuser”;
2.2.4. URL
1) 打开项目下的urls.py文件;
2) 输入代码
from django.contrib import admin
admin.autodiscover()
配置文件中已存在该代码,只需去掉注释即可;
3) 找到配置项urlpatterns,增加如下配置
url(r'^admin/', include(admin.site.urls)),
配置文件中已存在该代码,只需去掉注释即可;
4) 输入“python manage.pyrunserver”启动项目服务器;
5) 在浏览器中打开“http://127.0.0.1:8000/admin/”,即可看到后台管理界面,需要输入之前创建的账户才能进入管理;
2.3.1. 创建模块
目前的项目中还没有任何自己的应用模块,全是框架自动生成的东西;
可以创建自己的应用模块,在模块内创建数据表,并添加自己的页面;
1) 输入命令“python manage.py startappxxx”,其中xxx是模块的名称,例如:python manage.py startapp art
2) 此时在项目路径下多了一个名称为art的文件夹,该文件夹内保存的是与该模块相关的文件;
3) 打开项目下的settings.py文件,找到INSTALLED_APPS配置;
4) 增加针对该模块的引用’First.art’;#django 1.4版本后 直接写’art’
如遇到错误参考:
http://xiaozhen1900.blog.163.com/blog/static/174173257201271634537312/
2.3.2. 创建数据
1) 打开模块目录下的models.py文件,该文件是MVC中的M,负责应用的数据结构;
2) 文件中原有一句“from django.dbimport models”,现增加如下代码:
class TB1(models.Model):
content =models.CharField(max_length = 500)
submit_date =models.DateTimeField('auto_now_add')
表示要创建一个数据表,而该数据表的访问类名为TB1;以此方式可以创建多个数据表;
3) 输入命令“python manage.pysqlall art,可以查看自动生成的针对art模块下的所有数据表的sql创建代码,例如:
BEGIN;
CREATE TABLE "art_tb1" (
"id"integer NOT NULL PRIMARY KEY,
"content"varchar(100) NOT NULL,
"submit_date"datetime NOT NULL
);
COMMIT;
从该段代码可看出,数据表属于art模块,名称为art_tb1,针对该数据表的操作MODEL名称为TB1;
4) 运行命令“python manage.pysyncdb”则自动创建出数据表;
2.3.3. 添加数据
1) 在系统命令行模式下,定位到项目路径;
2) 输入命令“python manage.pyshell”进入专门针对该项目的命令行模式;
输入如下代码来添加数据:
>>from art.models import TB1 //从art模块导入TB1 MODEL
>>from datetime import datetime //导入框架的datetime
>>TB1.objects.create( //objects表示数据表里的行
content= ‘MyContent1’, //content字段
submit_date=datetime.now()) //submit_date字段
>>… //以此方式添加多条数据
遇到” DateTimeField received a naive datetime***”的错误,把setting.py文件里的 USE_TZ 改为False例如:USE_TZ = False
接着可使用如下的代码简单的获取到数据表内的数据:
>>all_line = TB1.objects.all() //获得TB1的所有行
>>print all_line[1].content //打印第一行的content字段
2.3.4. 创建页面
1) 页面一般统一放在ProjectPath\Templates目录下;Templates是较常用的名称,也可自行更改;
2) 在Templates下,针对应用模块的名称再单独创建子目录;
3) 例如“ProjectPath\Templates\art”表示该目录下存放的是针对art模块的页面;
4) 这些页面就是MVC中的V,负责应用的视图;
5) 在“ProjectPath\Templates\art”下创建一个最简单的静态的html页面,但注意html文件的编码方式需要为utf8;
2.3.5. 创建映射
1) 打开模块目录下的views.py文件,该文件是MVC中的C,负责应用的逻辑处理;
2) 写入如下代码:
from django.shortcuts import render_to_response
def MyFirstView(rq):
returnrender_to_response('art/Static1.html')
3) 函数MyFirstView只做一件事情,就是把页面跳转到art目录下的Static1.html;注意,该路径用的是相对路径,也就是会在Templates目录下寻找“art/Static1.html”,之所以能到Templates目录下寻找,就是后续的配置映射做到的;
2.3.6. 配置映射
在一个项目内创建模块,并使用该模块,全部步骤可以分为两个部分:模块MVC和项目MVC;
2.3.6.1. 模块MVC
按照之前的描述,在项目内创建一个模块时,按照MVC的思路分为三个步骤:
1) M:即创建模块并在模块的models.py中创建数据;
2) V:即在“项目\Templates\模块”目录下创建该模块对应的各个页面;
3) C:即在模块的views.py中创建各个逻辑控制函数;
2.3.6.2. 项目MVC
在完成一个模块的MVC之后,还需要在项目级别按照MVC的思路进行配置:
1) M:打开项目下的settings.py文件,找到INSTALLED_APPS配置;增加针对该模块的引用’First.art’;(或者’art’)
2) V:打开项目下的settings.py文件,找到TEMPLATE_DIRS配置;写入模版路径:
TEMPLATE_DIRS = (
'Templates')(’或者写出绝对路径’)
因此,编写控制函数时,如下的代码使得系统在Templates内寻找相应文件:returnrender_to_response('art/Static1.html');
3) C:打开项目下的urls.py文件;找到配置项urlpatterns,增加配置:
url(r'^test/', 'FirstProject.art.views.MyFirstView') 或者
url(r'^test/', 'art.views.MyFirstView');
4) 完成了模块MVC和项目MVC配置后,
在浏览器中打开“http://127.0.0.1:8000/test/”,
即可看到art/Static1.html页面;
2.3.7. 访问数据
2.3.7.1. 模块C
创建一个模块的控制器,用来生成页面数据以供页面显示;
打开模块目录下的views.py文件,添加函数如下:
#引入MODEL TB1来访问数据表art_TB1 from FirstProject.art.models import TB1 #定义函数MyDataView def MyDataView(rq): #获取数据表内的所有行 data_all_lines = TB1.objects.all() #将数据返回给页面 return render_to_response( #将跳转到该页面 'art/DataView.html', #’all_lines’是页面内访问数据使用的名称 #data_all_lines是该函数内的变量 {'all_lines':data_all_lines} ) |
注意:
1) 该控制器返回给页面使用的数据类型是一个列表,名称为’all_lines’;
2) 在一个函数内,一定要注意缩进方式,如果用空格缩进,则所有行都只能用空格来缩进,如果用TAB缩进,则所有行都只能用TAB来缩进,否则会报告IndentationError错误;
2.3.7.2. 模块V
在对应的模块页面目录下创建一个UTF8编码的DataView.html文件,用来显示模块控制器所生成的数据:
<BODY> {% if all_lines %} 数据内容如下:<br> <ul> {% for a_line in all_lines %} <li>{{ a_line.content }}</li> {% endfor %} </ul> {% else %} 无数据可显示. {% endif %} </BODY> |
注意,在HTML代码内使用python脚本时,
1) 使用{% %}来包含python脚本;
2) 使用{{ }}来包含要显示的变量内容;
该HTML代码翻译为自然语言如下:
<BODY> {% 如果all_lines变量不为空 %} 数据内容如下:<br> <ul> {% 循环处理每一行数据 %} <li>{{ 显示该行数据的content字段 }}</li> {% 结束循环 %} </ul> {% 如果all_lines变量为空 %} 无数据可显示. {% 判断结束 %} </BODY> |
2.3.7.3. 项目C
1) 打开项目下的urls.py文件;
2) 找到配置项urlpatterns,增加配置:
url(r'^viewdata/', 'art.views.MyDataView'),
3) 打开浏览器访问http://127.0.0.1:8000/viewdata/;则可以看到页面显示出目前的art_TB1数据表内的每一行的content内容;
2.3.8. 编辑数据
为了实现编辑数据的功能,可以在之前“访问数据”的基础上进行升级,只需要升级模块V和模块C即可;
2.3.8.1. 模块V
在原DataView.html文件的基础上,增加一个form,包含一个编辑框来提交数据:
<form action="/viewdata/" method="post"> <input type="text" name="new_content"/> <input type="submit" value="增加"/> </form> |
1) 声明该form的”method”是get还是post,从而在模块C中可以用request对象里的POST或GET属性来完成表单元素访问;
2) 该form的” action”配置表明,按下提交按钮后,浏览器将访问
http://127.0.0.1:8000/viewdata/;
3) 由此可见,对于页面(模块V)来说,永远只考虑“发送请求给某个URL”,而具体该URL由哪个控制器(模块C)来处理,是由配置来决定的;
4) 有一个输入框,name为”new_content”表明在模块C中可以通过request.POST.new_content来访问该元素;
5) 该页面目前的功能为:首先显示模块C生成的数据,其次可以提交用户所输入的新的content值;
2.3.8.2. 模块C
根据目前模块V的升级,http://127.0.0.1:8000/viewdata/的请求到来时有两种情况,但这两种情况都配置给同一个模块C的函数“MyDataView”:
1) 没有请求数据,即POST中没有数据;
2) 有请求数据,即POST中包含一个新的content值;
因此,在原views.py文件的“MyDataView”函数基础上进行升级:
#因为根据content字段要创建新的一行数据内容, #因此需要自动生成date_time字段,故需要引入该库 from datetime import datetime #修改该控制函数 def MyDataView(rq): #函数入口处需要先判断是否有new_content字段: if rq.POST.has_key('new_content'): #根据新字段在数据表中增加一行数据 TB1.objects.create( #content字段即为用户输入的内容 content = rq.POST['new_content'], #submit_date字段由代码生成 submit_date=datetime.now()) ……原来的代码不变 |
此时再访问http://127.0.0.1:8000/viewdata/,可以看到:
1) 页面首先显示目前art_TB1数据表中的所有数据;
2) 接着显示一个输入框,可以输入新的content数据并提交;
3) 提交数据后,页面刷新,再次显示目前art_TB1数据表中的所有数据,可看到刚输入的新的content内容已经被加入到数据表中;
4) 如果报告403错误,则在项目配置文件settings.py中保证引用了如下两个模块:
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware'