文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>开始Django之一

开始Django之一

时间:2009-04-28  来源:hkebao

现在打开命令提示符,进入到想要创建应用的目录后键入django-admin.py startproject news命令,调用Django的控制台命令新建一个名为news的工程,与此同时Django还在新创建的news文件夹下生成以下四个分工不同的文件。
  • __init__.py
    文件__init__.py可以向Python编译器表明当前文件夹下的内容是Python工程模块。
  • 2.manage.py
    manage.py是Python脚本文件,与Django的命令行工具django-admin.py配合,可以对建立的工程进行管理配置。
  • settings.py
    这是Django工程的配置文件,与工程相关的工程模块和数据库全局配置信息都在settings.py中设置。
  • urls.py
    文件urls.py负责配置URL的地址映射以及管理URL的地址格式。
当新的工程建立好之后,假如迫不及待就想知道新建工程的模样,Django已经为你准备好一款轻量级的Web服务器以便在开发过程中随时测试使用。开发者 只需在命令提示符下进入工程目录,键入命令manage.py runserver,就可以启动Web服务器来测试新建立的工程,如果启动没有错误,将可以看到下面这样的提示信息:“Development server is running at http://127.0.0.1:8000/”
[到此这一步已经测试过了没有问题的!]
当然,Django自带的Web服务器一般只是在开发测试的过程中使用,当Django工程真正发布时,可以通过加载mod_python.so模块把Django应用部署在Apache上,以方便Web访问的管理和配置。
Django的模型定义
在工程建立好之后,接下来就可以编写Django的应用模块。键入命令python manage.py startapp article,命令会在当前工程下生成一个名为article的模块,目录下除了标识Python模块的__init__.py文件,还有额外的两个文 件models.py和views.py
借助Django内部的对象关系映射机制,可以用Python语言实现对数据库表中的实体进行操作,实体模型的描述需要在文件models.py中配置。

在当前的工程中,需要有两个Models模型,分别对应List表和Item表,用来存储新闻的分类和新闻的条目,每个Item项都会有一个外键来 标记文章的归属分类。下面打开Django创建的models.py文件,按照文件注释中提示的模块添加位置,编写如下的代码:


清单 1. models.py文件模型定义
 class List(models.Model): 
title = models.CharField(maxlength=250, unique=True)
def __str__(self):
return self.title
class Meta:
ordering = ['title']
class Admin:

pass

上面这段Python代码定义了存储新闻分类的List数据表,上述模型中的定义会被Django转换成与数据库直接交互的结构化查询语言来建立数 据表,即创建一个名为List的表格,表格内的两个字段分别是Django自动生成的整型主键id和最大宽度为250个字符的VARCHAR类型字段 title,并且在title字段上定义了唯一性约束,来保证新闻分类不会有完全相同的名称。

在List类文 件里还定义了函数__str__(),作用是返回self字符串表示的title字段。而在类Meta中,设置了List表格按照title字母顺序的排 序方式。在类Admin的设置中,允许Django针对当前的Models模型自动生成Django超级用户的后台管理入口,关键词pass设定 Django将按照默认方式生成后台管理界面。这一部分在稍后的章节可以看到,由此也可以体会到Django带来的独特魅力。下面再来添加新闻条目 Item对应的Models模型,代码如下面所示:


清单 2. 添加新闻条目Models模型
 import datetime 
class Item(models.Model):
title = models.CharField(maxlength=250)
created_date = models.DateTimeField(default=datetime.datetime.now)
completed = models.BooleanField(default=False)
article_list = models.ForeignKey(List)
def __str__(self):
return self.title
class Meta:
ordering = ['-created_date', 'title']
class Admin:
pass

Item 数据表对应的Models代码稍微复杂一些,但并不晦涩。代码里首先引入datetime类型,用于定义表示文章创建日期的created_date字 段,并且通过Python的标准函数datetime.datetime.now返回系统当前日期来设置字段的默认值。在记录排序的ordering设置 中,符号“-”表示按照日期的倒序进行排列,如果文章创建日期相同,则再按照title的字母序正序排列。

到此为止,应用中模型部分需要定义的两个数据表都已经创建完毕,下一步的工作是让Django部署并在数据库中生成已经写好的Models模型。


Django模块的部署

settings.py 配置好数据库相关信息

清单 3. 添加所需的模块

 INSTALLED_APPS = ( 
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'news.article',
)

添加admin模块后还不能立即使用Django的admin后台管理界面,需要打开News工程根目录下的urls.py文件,将“# Uncomment this for admin:”后面的#注释去掉,使得Django针对管理界面的URL转向“(r'^admin/', include('django.contrib.admin.urls')),”可用,这样访问admin模块时Django就可以顺利解析访问地址并 转向后台管理界面。

当配置文件的改动完成之后,就可以在News工程的命令提示符下执行manage.py syncdb指令。Django会根据模型的定义自动完成ORM的数据库映射工作,屏蔽了底层数据库细节和SQL查询的编写。:::




相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载