在django的settings文件中,这部分是关于数据库的配置
学习的话就不需要改里面的配置,默认用了自带的sqlite库。这种数据库就是一个文件。如果用mysql这种数据库,这里就需要改变相应的配置。
模型
简单来说,模型就是一种通过代码的方式来对数据库进行增删改查的操作。而不需要使用sql语句。
在polls下的models文件输入以下代码
from django.db import models
# Create your models here.
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.db.models.Model的子类。一个类就代表数据库的一张表。每个字段都是Field类的一个实例。比如CharField(用来保存字符串数据)和DateTimeField(用来保存时间类型)。它们用来控制每个字段保存的数据类型
每一个Field实例的名字就是数据库字段的名字(如question_text)。
Field实例可以使用一些参数,比如max_length,定义最大长度。这不仅是数据库需要,同时也会用于数据验证功能。
启用模型
需要将应用添加到项目中,需要在INSTALLED_APPS中增加应用的配置文件链接。对于本例的应用配置文件PollsConfig是polls/apps.py。所以它的点式路径是polls.apps.PollsConfig
一般只需要输入polls也是可以的
然后再运行makemigrations命令,这是一个对models文件修改进行检查,并且保存这些修改为一个迁移(migration)
python manage.py makemigrations polls
可以通过下面命令来查看执行的sql是什么样的
python manage.py sqlmigrate polls 0001
然后再执行migrate命令,这是一个对数据库真正进行执行的命令
python manage.py migrate
所以修改模型分为三步
- 在models.py中修改模型;
- 运行
python manage.py makemigrations
为改动创建迁移记录; - 运行
python manage.py migrate
,将操作同步到数据库。
之所以需要第二步,这是因为如果使用了git等软件。就可以知道对models文件做了哪些修改
使用模型api
进行python的交互环境,尝试使用Django提供的数据库访问api。输入命令:
python manage.py shell
先导入写好的模型类
from polls.models import Question, Choice
创建一个Quertion对象
# 创建一个新的question对象
# Django推荐使用timezone.now()代替python内置的datetime.datetime.now()
# 这个timezone就来自于Django的依赖库pytz
from django.utils import timezone
q = Question(question_text="What's new?", pub_date=timezone.now())
保存对象
# 你必须显式的调用save()方法,才能将对象保存到数据库内
q.save()
默认会获得一个自增id主键
通过对象属性调用方式,查看模型字段的值
修改属性的值,通过save()来保存
objects.all() 用于查询数据库内的所有questions
上面的<Question: Question object>
是一个不可读的内容展示,你无法从中获得任何直观的信息,为此我们需要改动一下代码,让Django在打印对象时显示一些我们指定的信息。
返回models文件增加__str__方法,并且增加一个可以判断是否最近发布的方法,然后重新启动交互环境。
from django.db import models
from django.utils import timezone
import datetime
# 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):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
先看下__star__()的效果
Django提供了大量关键字参数查询API
看下自己定义的方法是否有用
创建3个choices
Choice对象可通过API访问和他们关联的Question对象
admin后台管理站点
Django可以基于项目的models创建一个后台管理站点
1.创建管理员用户,输入命令
python manage.py createsuperuser
然后会让你输入用户名,邮箱和密码,如果密码太过简单会提示,可以Y强制通过
2.访问后台管理站点
访问这个地址可以看到登录界面。
在这里可以把管理站点的地址改掉,毕竟叫admin太容易猜到了
登录后是这样的
3.在admin中注册投票应用
在admin.py文件加入以下代码
from django.contrib import admin
from .models import Question
from .models import Choice
# Register your models here.
admin.site.register(Question)
admin.site.register(Choice)
刷新管理站点
可以对Questions和Choices进行新增,并且可以对已有的进行修改。