昨天试玩了一下Django,主要就是如何安装,以及如何来创建一个项目,同时呢,我也稍微的了解了一下Django的特性,总体来说,还是很不错的,那么今天我们就来为我们昨天创建的Django项目创建一个投票的应用。
创建投票应用App
其实我们昨天也讲过了,要为你的Django创建一个应用呢,首先就要到manage.py文件所在的目录下,执行startapp命令,我们的投票应用取名叫做polls,在终端中执行以下命令:
python manage.py startapp polls
这样儿我们的投票应用就创建完成了,可以看到在我们当前的目录下生成了一个polls目录,目录结构和我们昨天创建过的一致:
polls/
__init__.py
models.py
tests.py
views.py
在这个简单的投票应用里呢,我们将创建两个模型:Poll和Choice,这就需要我们来编辑一下polls目录下的models.py文件,添加如下代码:
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
这样儿我们就完成了投票应用两个模型的创建,代码也不难理解,从这里也可以看出,良好的命名规范以及编码习惯,会让使用者事半功倍。
安装模型
接下来我们就需要安装激活我们的投票应用了,跟昨天的类似,我们来修改一下settings.py文件,在INSTALLED_APPS中添加我们的应用名称,代码如下:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'polls',#添加我们的投票应用
)
这样儿呢Django就知道,我们要安装并激活polls这个投票应用了。那我们接下来要做的,就是再次运行syncdb命令,在我们的数据库中为投票应用创建相应的表了:
python manage.py syncdb
尝试Django提供的API
现在我们来进入python的交互模式下,来试用一下Django提供的API,在终端中输入如下命令:
python manage.py shell
之后就进入了python交互模式,那么来看一下我们的一些基本的操作:
>>> from polls.models import Poll, Choice #在这里导入我们刚写好的模型
>>> Poll.objects.all() #查看模型的所有对象,结果必然为空,因为我们还没有创建
[]
# 创建一个新 Poll
>>> from django.utils import timezone
>>> p = Poll(question="What's new?", pub_date=timezone.now())
>>> p.save() 必须显式调用save方法才能进行保存
>>> p.id #这次poll有了一个id
1
# 通过 Python 属性访问数据库中的列
>>> p.question
"What's new?"
>>> p.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)
# 通过改为属性值来改变值,然后调用 save() 方法
>>> p.question = "What's up?"
>>> p.save()
# objects.all() 用以显示数据库中所有的 polls 。
>>> Poll.objects.all()
[<Poll: Poll object>]
我们可以清楚的看到,Django提供的一些基本的常用API,操作起来也是十分的简便,但是,为什么,我们创建了poll的对象,并且也存储到数据库中了,为啥最终调用Poll.objects.all()显示出来的还是[<Poll: Poll object>]这种形式呢?不着急,
我们来修改一下polls目录下的models.py文件,让它能够显示我们想要的结果:
class Poll(models.Model):
# ...
def __unicode__(self):
return self.question
class Choice(models.Model):
# ...
def __unicode__(self):
return self.choice_text
这样儿,我们再次使用Django提供的API来查看Poll的对象集合的时候,就会出现如下所示的结果:
>>>Poll.objects.all()
[<Poll: what's up?>]
这里有个小插曲,为啥不是我们在python中常用的__str__而是__unicode__呢?这是因为Django模型默认处理的是unicode格式。
启用管理网站
在默认情况下,Django管理网站是不启用的,它是可选的,那么这里我们想要启用网站的话,怎么办?需要以下三步:
在INSTALLED_APPS中去掉 "django.contrib.admin"的注释
再次运行python manage.py syncdb命令——需要记住的是,每次修改了INSTALLED_APPS中的内容的话,都要再次运行此命令,一旦添加了新的应用,数据库表就需要更新。
编辑我们的ericblog下的urls.py文件,取消有关管理行的注释,一共三行(仅限管理):
from django.contrib import admin
admin.autodiscover()
url(r'^admin/', include(admin.site.urls)),
做了上述修改之后,我们就可以在浏览器中查看了,这里昨天讲过了,略过不谈。
注册polls应用
但是我们进入到网站管理之后,看不到我们的Polls应用啊,不着急,要实现对polls应用的管理,我们就需要为Poll对象创建一个管理界面,在polls目录下创建一个admin.py文件,添加如下代码:from django.contrib import admin
from polls.models import Poll
admin.site.register(Poll)
保存之后呢,我们需要重启服务器才能生效,然后我们来看一下运行的结果:
然后就是进入Polls的管理界面之后:
总结
OK,Django的简单入门Demo今天就到这里,以后还会抽出时间来,进行更加深入的学习,所谓学无止境嘛。
2013年8月18日,Eric.Tang 记