昨天试玩了一下Django,主要就是如何安装,以及如何来创建一个项目,同时呢,我也稍微的了解了一下Django的特性,总体来说,还是很不错的,那么今天我们就来为我们昨天创建的Django项目创建一个投票的应用。
其实我们昨天也讲过了,要为你的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
现在我们来进入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>]这种形式呢?不着急,
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)),做了上述修改之后,我们就可以在浏览器中查看了,这里昨天讲过了,略过不谈。
from django.contrib import admin from polls.models import Poll admin.site.register(Poll)保存之后呢,我们需要重启服务器才能生效,然后我们来看一下运行的结果:
然后就是进入Polls的管理界面之后:
OK,Django的简单入门Demo今天就到这里,以后还会抽出时间来,进行更加深入的学习,所谓学无止境嘛。
2013年8月18日,Eric.Tang 记