摘要:Django官方文档(1.8.2)的投票web应用,django的入门示例,展示了一个django网页应用建立的大致过程。
<创建项目>
$ django-admin startproject mysite
在目标文件夹下打开命令行,输入创建django项目的指令(其中mysite为自定义的项目名),将会创建一个django项目的初始化文件夹,名为mysite。文件夹内有子文件夹mysite,内有文件setting.py,是该项目的基础设置文件。对该文件进行一些初始化修改:
(1)找到 LANGUAGE_CODE ,改为'zh-hans',修改文字为汉字;(2)找到 TIME_ZONE ,改为'Asia/Shanghai',修改为本地时区。
<数据库初始化>
$ python manage.py migrate
在manage.py文件的路径下打开命令行,执行上面的指令(manage.py是协助项目管理的文件),将会创建一个空白的数据库,该数据库内没有任何表单,表单将通过创建模型而建立。
<运行服务器>
$ python manage.py runserver
执行指令后将会运行一个轻量级的服务器,然后可以通过 http://127.0.0.1:8000/ 或 http://localhost:8000/ 访问django的欢迎页面。可以手动选择服务器的端口,只需在指令后加上端口的数字,如;
$ python mange.py runserver 8080
则访问方式变更为http://127.0.0.1:8080/ 或 http://localhost:8080/
<创建应用>
$ python mange.py startapp polls
和创建项目类似,创建应用的指令由startproject变为startapp,执行指令后创建应用polls(投票),在项目文件夹里生成应用文件夹polls。但是此时应用没有完全创建成功,我们需要在项目内安装该应用。安装方法是在上文提到的settings.py文件内找到:
INSTALLED_APPS = (...)
然后在该元组的末尾添加上应用,示例:
INSTALLED_APP = (
.......,
'polls',
)
至此应用创建并安装成功。
<创建模型>
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import datetime
from django.db import models
from django.utils import timezone
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
def was_published_recently(self):
'''模型也是类,所以也可以有方法。timezone.now-timedelta(days=1)表示一天前'''
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
模型代码放在路径polls/models.py的文件内,上文已经提到,模型是保存进数据库里的表的格式定义。上述代码创建了两种模型:Question和Choice(它们都是models.Model的子类)。其中表Question有两列,问题描述question_text和发布时间pub_date。表Choice同理,其中question是Question的子类。注意到代码中每一列除了ForeignKey外都是某种Field,这是数据保存进数据库的格式,类似的Field有很多种。
<激活模型>
创建模型后还需要激活模型才能把模型描述的表放进数据库里。执行下述指令告诉django模型文件发生了变动:
$ python manage.py makemigrations polls
再执行下述指令在数据库中创建模型所对应的表:
$ python manage.py migrate
执行完毕后数据库依然是空白的,但不再是空的了,现在数据库里已经有待填入数据的表了。接下来通过django的shell来测试一下模型的工作情况。
<shell>
$ python manage.py shell
执行指令将在命令行里进入熟悉的python的shell界面,但这个shell是已经准备好django的环境了。接下来示范在shell里对数据库做一些数据修改,了解它的工作情况。
>>> from polls.models import Question, Choice
#从polls.models包导入两个模型(类)
>>> Question.objects.all()
<QuerySet []> 或 []
#此时表Question是空的,Question.objects.all()是查询表所有数据的操作
#创建并保存数据
>>> from django.utils import timezone #timezone,django里的时间辅助
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save()
#查询
>>>q.id
1
>>>q.question_text
"what's new?"
#查看问题q所对应的Choice表
#因为Choice()里有models.ForeignKey(Question),所以Question的实例有choice_set属性
>>> q.choice_set.all()
(QuerySet [])
#为问题q创建投票选项
>>> q.choice_set.create(choice_text='Not much',votes=0)
>>> q.choice_set.create(choice_text='The sky',votes=0)
>>> q.choice_set.create(choice_text='Just hacking again',votes=0)