创建模型
既然你的开发环境,即工程,已经设置好了,那么你应该开始工作了。
用Django写的每一个应用都会包含一个遵循某种约定的包。Django能够自动产生一个应用的基本目录结构,所以你能够专心于写代码而不是创建目录。
工程和应用的比较
一个工程和一个应用之间的区别是什么?一个应用指的是一个Web应用,做例如网络日志系统、一个做公共纪录的数据库或者一个简单的投票应用。一个工程是配置文件和多个应用的集合,一个工程可以包含多个应用,一个应用可以在多个工程中。
你的应用可以放在你python路径的任何地方。在这个教程中,我们会在与manage.py
文件同一目录下创建我们的投票应用,这样的话,创建的应用可以作为顶层模块被导入,而不是作为mysite
的子模块。
为了创建你的应用,确保你现在是在与manage.py
处于同一等级目录下,键入下面的命令:
$ python manage.py startapp polls
展示:
charies:Desktop weichuang$ cd mysite
charies:mysite weichuang$ ls
db.sqlite3 manage.py mysite
charies:mysite weichuang$ python manage.py startapp polls
charies:mysite weichuang$ ls
db.sqlite3 manage.py mysite polls
这会创建一个poll
目录,里面是这样的:
这个目录结构会存放投票这个应用。
用Django写一个数据库Web应用的第一步是定义你的模型
在我们这个简单的投票应用中,我们会创建两个模型:Question
和Choice
。一个Question
模型包含一个问题和一个发行日期。一个Choice
模型包含两个字段:选择的文本和投票计数器。 每个Choice
都与Question
是关联的。
这些概念是由简单的python类来表示的。像下面那样编辑polls/models.py
文件
from django.db import models
class Question(models.Model):
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeFiled('date published')
class Choice(models.Model):
question=models.ForeignKey(Question)
choice_text=models.CharField(max_length=200)
votes=models.IntegerField(default=0)
代码很清楚,每个模型是由django.db.models.Model
的子类表示的。每个模型拥有许多类成员变量,每个类类成员变量代表模型中的一个字段。
每个字段是由Field
类的实例表示的。例如,CharField
代表字符字段,DateTimeField
代表日期。这会告诉Django每个字段是什么类型的数据。
每个Field
类的实例的名字就是字段名,这样的格式对机器来说是友好的。你会在python代码中使用这个值,并且你的数据库会使用它作为字段名。
一些Field
类需要一些参数。例如,CharFiled
需要你给它传递max_length
。我们不久就会发现,那样使用不仅仅是以数据库的模式,而且非常有效。一个Field
可以有多种可选的参数,在这个例子中,我们把votes
的default
值是0。
最后,使用ForeignKey
定义了一个关系。那会告诉Django每个Choice
模型都会与Question
有关系。Django支持许多常见的数据库关系:多对一、多对多、一对一。