1、创建数据库
打开mysite/settings.py文件,可以看到我们使用Python中已包含的默认的数据库SQLite,也可以使用其他的数据库,如Oracle、Mysql等。里面也包含时区、语言等设置信息。
在使用数据库和表之前,输入下面的命令:
python manage.py migrate
输出信息为:
生成和数据库有关的管理、授权、内容类型和session等内容。
2、建立数据库表模型
模型与数据库中表结构相关,如字段的长度、类型等信息。
在投票系统中,建立了两个数据库表相关的模型:Question和Choice,问题包含问题和产生的日期,选项包含选项和投票的计数。Question和Choice是一一对应的关系。
编辑polls/models.py文件,内容如下:
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField("date published")
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
上述类中的变量和数据库中表建立联系。可以通过上面创建数据库中的表和Django Web框架的模型对象。
3、激活模型
编辑mysite/settings.py文件,在INSTALLED_APPS 中,添加一条语句:"polls.apps.PollsConfig",如下所示:
INSTALLED_APPS = [
"polls.apps.PollsConfig",
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]
现在Django框架知道包含有投票系统模块。完成以上步骤后,运行命令:
python manage.py makemigrations polls
则创建相应的模型。
运行命令:
python manage.py sqlmigrate polls 0001
则生成表结构和索引等信息,如下图所示。
运行python manage.py migrate,则在数据库中创建相应的模型和表。
4、与Django的交互
通过python manage.py shell命令进入与Django的交互。
通过输入以下命令,
from polls.models import Choice, Question
from django.utils import timezone
q = Question(question_text="What's new?", pub_date=timezone.now())
q.save()
则在数据库表中插入了一条记录,如下图所示:
运行以下命令,则在关键字为1的表中插入三条记录:
>>> q = Question.objects.get(pk=1)
>>> q.choice_set.create(choice_text="Not much", votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text="The sky", votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text="Just hacking again", votes=0)
修改polls/models.py文件,以便在数据库表的查询中能返回更明确的信息。
class Question(models.Model):
...
def str(self):
return self.question_text
class Choice(models.Model):
...
def str(self):
return self.choice_text
并增加另一个自定义的方法:
import datetime
from django.db import models
from django.utils import timezone
class Question(models.Model):
...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
注意上面又导入了和时区有关模块和工具类。
5、建立管理员账号
通过以下命令来创建一个管理站点。
python manage.py createsuperuser
在下图中,需要输入管理员用户名、密码、邮箱等信息。
现在打开网页,输入地址,就可以打开管理员页面了。
输入用户名和密码,进入管理员页面。
这时我们发现有用户名和组的信息,修改 polls/admin.py 将投票系统加入,以便管理投票系统。
from django.contrib import admin
from .models import Question
admin.site.register(Question)
刷新管理页面,则新出现投票相关的内容。
点击最下的问题链接,我们就可以对投票系统,进行问题的添加、修改和删除等操作。