Diango是Python的一个Web开发框架。框架的目的是为了给开发提供方便,虽然刚开始学习时会觉得很麻烦。正在看的书是《Practical Django Projects》。
第 一个例子是一个简单的内容管理系统CMS(Contents Management System)。Django最初就是在某个新闻网站开发的,为了方便该网站的内容管理(新闻的编辑、发布,等等)。简单说,CMS应包括权限管理、页面 编辑、发布。完成这些事情离不开数据库的支持。第一个例子为简单起见,采用SQLite数据库。
假定Django安装到C:/Python26/Lib/site-packages/django。首先要为CMS建立一个project,不妨命名为cms,用Django的脚本django-admin.py完成此任务。到选定的工程目录下,执行以下命令
将为工程建立一个名为cms的子目录,里面包括一些工程需要的基本文件,如__init__.py、manage.py、settings.py、urls.py。
运行manage.py脚本(python manage.py runserver ), 可以启动一个简单的Web Server,在浏览器上输入“http://127.0.0.1:8000/”可连接到此Web Server。(实际上,manage.py内部只是调用了django.core.management的execute_manager()函数,本 工程的settings作为参数传递给函数)
settings.py保存工程的配置信息,urls.py定义URLs到实现代码的映射。
数据库的连接信息就保存在settings.py中(DATABASES = )。Django工程是一组由Django支撑的应用,一些常见的应用场景已经定制在Django中。哪些应用要安装到此项目中,也要在 settings.py中定义(INSTALLED_APPS = ),一个项目缺省会包括下面的应用:
'django.contrib.auth', # 做身份验证
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites', # 管理多个Web站点,发布项与站点的对应关系
'django.contrib.messages',
对于CMS项目,还需要另外两个应用:
'django.contrib.admin', # 提供站点管理界面
'django.contrib.flatpages',
flatpages应用用来为简单页面 提供数据模型,包括标题、内容、该页对应的URL,等等,对应数据库表为django_flagpage。
python manage.py syncdb 将建立工程需要的数据库。具体实现为:查找安装的应用列表,找到每个应用的数据模型(model.py),数据模型中有对应的数据库表定义;数据库建立 后,Django找到每个应用的初始化代码并执行,例如,django.contrib.auth的初始化代码提示你建立一个用户账号;向数据库表中插入 必要的初始数据。
urls.py中定义URL的匹配模式,以及每种模式对应的view(Python函数,对HTTP请求做出响应)、或者是一个include,重用其他URL配置定义来处理此处的模式。匹配模式采用正则表达式定义。比如:
(r'^admin/', include(admin.site.urls)),
(r'', include('django.contrib.flatpages.urls')), # 所有不与上面匹配的regex,都与此模式匹配
第一条模式定义表示:当用 http://127.0.0.1:8000/admin/ 连接Web服务器时,将出现一个登录页面。用执行syncdb时建立的用户账户登录,将进入到站点管理页面,可以在此处增加用户/组、增加站点、增加简单 页面:django.contrib.auth为用户和组操作提供数据模型,django.contrib.sites为站点管理提供数据模 型,flatpages为简单页面管理提供数据模型。
在此处点击“增加简单页面”,只是在数据库中保存了简单页面的定义(这正是数据模 型,或者说urls.py,做的工作),但这样的简单页面在浏览器显示时究竟是怎样的布局?还需要定义出显示模板 (Template),'django.contrib.flatpages'缺省地去查找模板文件 flatpages/default.html。
重复一遍。如果要一个页面正常显示,需要做两项工作:一,在urls.py中定义URL的匹配模式(及相应的数据模型);二,定义相应的显示模板。
1. (r'', include('django.contrib.flatpages.urls')) 定义了处理简单页面的数据模型(这里采用了通配的regex)
2. 在flatpages子目录下建立default.html文件,作为页面的显示模板
Django 的模板系统力图达到两个目标:1)在模板中允许的代码尽量最少,以避免程序逻辑混入模板中;2)不采用某种特殊的标注语言如XML。模板文件中提供两个机 制,Variables 以及 Tags。Variable是一个占位符,其实际内容由应用的数据模型从数据库表中查询然后填入。Tag可做几乎任何事情,其实际效果依赖于特定的 Tag,开发者可以定义自己的Tag完成特定任务。
模板文件的最终输出是普通的HTML文件,这个文件提供给浏览器。模板文件的定义可以 保存在:1)settings.py中TEMPLATE_DIRS规定的目录中;2)在安装的应用中,如果任何一个包含子目录 templates/ 。模板文件最好保存在与代码分开的地方,以体现程序逻辑与页面展示的分离。
一个示例的模板文件如下(双花括号中是模板中的变量):
与MVC(Model-View-Controller)略有区别,Django的模式通常称为MTV(Model-Template-View).