DjangoDevelopmentLeon DongLiming_Do(at)smics.comDraft Django1.0beta2●简介●安装●开始开发●定义Model●定义Form●开发Views●编写Template●新的期待 1.简介●Django是一个强大柔韧的Web系统开发框架●使用编程语言Python开发●全面与整合的各项功能●快速并简化的开发流程●帮助你快速开发项目和应用●语言好,思想好,设计好,实现好,测试好 2.安装●下载并安装Python()●下载并安装Django()●安装命令:python setup.py install 3.开始开发●3.1.创建项目●使用命令python djangoadmin.py startproject myproject●获得帮助python djangoadmin.py startproject –help●项目目录结构 myproject| __init__.py #表明这个目录是一个Python package| settings.py # Django项目的设置和配置文件| urls.py # Django项目的URL声名和配置文件| manage.py #与Django项目交互的命令行工具 3.2.运行开发服务器●使用命令python manage.py runserver●获得帮助python manage.py runserver help●指定机器名称和端口python manage.py runserver servername:port●访问地址可以看到一个默认的欢迎页面 3.3.创建应用●使用命令python manage.py startapp myapp●获得帮助python manage.py startapp –help●应用目录结构 myproject| myapp | __init__.py # 表明目录是一个Python package | models.py # 模型定义文件,根据模型定义生成数据库结构 3.4.设置数据库●编辑settings.py, 指定数据库引擎、数据库名称等配置项目●配置开发数据库DATABASE_ENGINE = 'sqlite3'DATABASE_NAME = 'myproject.db'●也可以设置为'postgresql_psycopg2', 'postgresql', 'mysql', 'ado_mssql' 3.5.激活应用●编辑settings.py,添加应用的package,将使服务器启动时自动加载应用INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'myproject.myapp',) 3.6.配置URL映射●每当Django收到Request,它将根据URL映射的模式(URL pattern)匹配到视图(views.py)中的回调函数.●Django从上到下逐个进行模式匹配,当遇到第一个匹配的模式后停止,调用相应的视图方法处理Request.● 3.6.配置URL映射●编辑项目目录下的urls.py●增加myapp的URL映射urlpatterns = patterns('', # My App: (r'^myapp/', include('myproject.myapp.urls')),) 3.6.配置URL映射●在myapp目录下建立urls.py●Django使用正则表达式匹配URL, 配置应用的URL映射内容如下:from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^entry/$', 'myapp.views.entry_list'), (r'^entry/(?Pobject_id\d+)/$', 'myapp.views.entry_detail'),) 3.6.配置URL映射●在模式中可以通过(?Pnamepattern)为组命名,上例中的object_id将作为第二个参数,传递到函数entry_detail()中.●第一个参数为默认的request,因此myproject/myapp/views.py中的函数声明将是:def entry_detail(request, object_id): # ... write source code to handle request here pass 3.6.配置URL映射●New可以使用url()函数代替tuple处理URL映射,并且可以为URL pattern命名.urlpatterns = patterns('', # url(regex, view, kwargs=None, name=None, prefix='') # (r'^entry/$', 'myapp.views.entry_list'), url(r'^entry/$', 'myapp.views.entry_list', name='indexview'), (r'^entry/(?Pobject_id\d+)/$', 'myapp.views.entry_detail'), ) 3.7.使用AdminSite●编辑settings.py激活Admin SiteINSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', 'myproject.myapp', ) 3.7.使用AdminSite●编辑项目根目录下的urls.py,去掉admin前的注释符号from django.conf.urls.defaults import * # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # My App: (r'^myapp/', include('myproject.myapp.urls')), # Uncomment the next line for to enable the admin: (r'^admin/(.*)', admin.site.root), ) 3.7.使用AdminSite●使用命令python manage.py syncdb●将自动创建Admin Site所需要的数据表,并可以创建管理员帐号●再次运行开发服务器●访问Admin Site ●可以创建User和Group并设置权限 4.定义Model●4.1.快速举例●Model是关系型数据在应用程序中的映射.通常数据库中的表和Model是相互对应的.表中的栏位表现为Model中的属性●对于不需要存储在数据库表中的信息, 可以通过定义一个叫作Meta的Model的内类(Inner Class)来实现●Django提供了通过Model自动生成数据库表和字段, 并且访问操作数据的功能 4.1.快速举例●编辑myapp目录下的models.py定义Modelfrom django.db import modelsclass Entry(models.Model): headline = models.CharField(max_length=255) body_text = models.TextField() pub_date = models.DateTimeField() 4.2.定义Fields&Relations●Django有两方面对于字段命名的限制●一个是不能使用python的保留字(如: pass)●另一个是字段的名字中不能存在两个或以上下划线(即: __ ),Django使用双下划线作为默认的查询符号●使用命令python manage.py shellfrom django.db import modelsdir(models)● New可使用db_tablespace选项代替settings中的DEFAULT_INDEX_TABLESPACE, 如果数据库不支持则被忽略 4.2.定义Fields&Relations●列举fields:●AutoField●BooleanField●CharField●CommaSeparatedIntegerField●DateField●DateTimeField●DecimalFieldNew固定精度十进制小数可使用参数max_digits和decimal_places 4.2.定义Fields&Relations●EmailField●FileFieldNew使用max_length改变默认的varchar(100)●FilePathFieldNew使用max_length改变默认的varchar(100)●FloatField Change表现为Python中的float●IPAddressField●ImageFieldNew使用max_length改变默认的varchar(100)●IntegerField●NullBooleanField●PhoneNumberField 4.2.定义Fields&Relations●PositiveIntegerField●PositiveSmallIntegerField●SlugField●SmallIntegerField●TextField●TimeField●URLField●USStateField●XMLField 4.2.定义Fields&Relations●列举relationships:●OneToOneField Onetoone relationships●ForeignKey Manytoone relationships●ManyToManyField Manytomany relationships●New在另外一个app中引用当前Model中的类, 可以通过applabel.classname的方式, 如: auther = models.ForeignKey('auth.User') 4.2.定义Fields&Relations●New使用额外的类建立ManyToMany关联class Person(models.Model): name = models.CharField(max_length=128) def __unic