试玩儿Django(二)——创建一个投票应用

昨天试玩了一下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的管理界面之后:

试玩儿Django(二)——创建一个投票应用_第1张图片

总结

 OK,Django的简单入门Demo今天就到这里,以后还会抽出时间来,进行更加深入的学习,所谓学无止境嘛。


2013年8月18日,Eric.Tang 记








你可能感兴趣的:(python,django,应用)